ASP.NET MVC Ajax表单的HTTP POST不包括提交按钮

3

我无法确定在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"]并从那里确定正确的操作方案。

相当笨重,但我实在看不出其他替代方案。


如果这是一个常规表单而不是Ajax表单,这种方法是否有效? - Amir
我没有尝试过,但我认为是可以的。当你禁用JavaScript时它可以工作。一个类似的建议(针对常规表单)在这里:https://dev59.com/F3RB5IYBdhLWcg3w-8Po - intoOrbit
1个回答

2

看这里。看起来这是一个bug。个人建议将您想了解的按钮名称注入到一个隐藏的表单字段中作为临时修复方法。


我猜这是微软的一个bug。将按钮名称注入到隐藏字段中正是我计划的解决方法。等我有代码时,我会编辑我的原始帖子。 - intoOrbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接