2009-09-22 70 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