我无法确定表单提交一个Ajax表单POST在ASP.NET MVC中按下按钮。我有一个基本上看起来像一种形式:HTTP POST不包括提交按钮
<% using (Ajax.BeginForm("Edit",
new { code = Model.Code },
new AjaxOptions() {
UpdateTargetId = "resultsDiv"
})) {%>
<p>
<%= Html.TextBox("Name", Model.Name)%>
<input id="submitButton1" name="submitAction" class="ajaxSubmitButton"
type="submit" value="Button 1" />
<input id="submitButton2" name="submitAction" class="ajaxSubmitButton"
type="submit" value="Button 2" />
<input id="testHiddenValue" name="testHiddenValue"
type="hidden" value="hello world!" />
</p>
<% } %>
,我可以访问下面的POST变量标准的HTTP POST(即禁用JavaScript。)后:
- 名称=无论
- submitAction =按钮1
- testHiddenValue = hello world!
但是,在启用JavaScript的情况下单击该按钮不包含submitAction值。我已通过检查Fiddler的POSTs来验证这一点。
我的直觉是,微软的Ajax库只是不序列的提交按钮的值。无论如何,我该如何解决这个问题,以便我的控制器知道哪个按钮被点击了?
编辑:是的,它看起来像在Microsoft Ajax库中的错误(见下文)。要解决这个问题,我主要增加了以下的jQuery代码:
$(document).ready(function() {
$("#formId .ajaxSubmitButton").live("click", function() {
$("#testHiddenValue").attr("value", $(this).attr("value"));
});
});
然后在我的控制,如果Request.IsAjaxRequest() == true
,我可以检查#testHiddenValue的价值。否则,我可以查看Request.Form["submitAction"]
并从那里确定正确的行动方案。
相当笨重,但我真的不能看到另一种。
如果这是一种常规形式而不是ajax形式,这种方法是否可行? – Amir 2009-09-22 19:32:21
我还没有尝试过,但我是这么认为的。它在您禁用JavaScript时起作用。类似的建议(对于常规形式)在这里:http://stackoverflow.com/questions/442704/how-do-you-handle-multiple-submit-buttons-in-asp-net-mvc-framework – intoOrbit 2009-09-22 19:35:58