HTTP POST из формы ASP.NET MVC Ajax не включает кнопки отправки - PullRequest
3 голосов
/ 22 сентября 2009

Я не могу определить, какая кнопка отправки формы нажата во время 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"] и определить правильный курс действий оттуда.

Довольно неуклюжий, но я не вижу альтернативы.

1 Ответ

2 голосов
/ 22 сентября 2009

Смотрите здесь . Похоже, это ошибка. Лично я бы посоветовал ввести имя кнопки, о которой вы хотите знать, в скрытое поле формы как временное исправление.

...