我無法確定表單提交一個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