Я не могу определить, какая кнопка отправки формы нажата во время POST формы Ajax в ASP.NET MVC. У меня есть форма, которая в основном выглядит так:
<% 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:
- Имя = что угодно
- submitAction = Кнопка 1
- testHiddenValue = Привет, мир!
Однако нажатие этой кнопки с включенным JavaScript не включает значение submitAction. Я проверил это, проверив POST с помощью Fiddler .
Я догадываюсь, что библиотека 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"]
и определить правильный курс действий оттуда.
Довольно неуклюжий, но я не вижу альтернативы.