2009-09-22 64 views
3

我无法确定表单提交一个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"]并从那里确定正确的行动方案。

相当笨重,但我真的不能看到另一种。

+0

如果这是一种常规形式而不是ajax形式,这种方法是否可行? – Amir 2009-09-22 19:32:21

+0

我还没有尝试过,但我是这么认为的。它在您禁用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

回答

2

See here。看起来这是一个错误。我个人会调查注入你想知道的按钮名称到一个隐藏的表单域作为临时修复。

+0

我猜这是微软的错误。将按钮名称注入隐藏字段正是我计划的解决方法。当我拥有它时,我将用代码编辑我的原始帖子。 – intoOrbit 2009-09-22 19:53:50