我无法确定在ASP.NET MVC中的Ajax表单提交期间哪个表单提交按钮被点击。 我有一个基本上如下的表单:
<% 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>
<% } %>
在标准HTTP POST(即JavaScript禁用)之后,我可以访问以下POST变量:
- Name = whatever - submitAction = Button 1 - testHiddenValue = hello world!
然而,启用JavaScript后点击该按钮不会包括submitAction值。我已经通过检查Fiddler的POST进行了验证。
我的直觉是Microsoft 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"]
并从那里确定正确的操作方案。
相当笨重,但我实在看不出其他替代方案。