У меня есть простая форма, которая используется для обновления объекта в моем приложении ASP.NET MVC. Я хочу, чтобы пользователь мог отправить форму, вызвать соответствующее действие на моем контроллере, а затем уведомить пользователя о завершении обновления.
Поскольку я хотел отобразить диалоговое окно JQuery после того, как пользователь нажимает кнопку обновления, я хотел использовать JQuery для отправки формы. Однако моя проблема заключается в следующем:
Хотя я могу легко заставить JQuery вызывать действие на моем контроллере, я не могу заставить его вызывать действие, которое я уже настроил на своем маршруте и которое было украшено [Authorize]
и [AcceptVerbs(HttpVerbs.Post)]
Например, если пользователь обновляет свою сущность по следующему URL:
/SomeController/Edit/5
Когда JQuery отправляет форму, я хочу отправить ее в свое редактируемое действие, которое уже оформлено и принимает идентификатор в качестве параметра.
JQuery, который я использую для публикации формы, выглядит следующим образом:
$("#formFoo").submit(function() {
var frm = $("#formFoo");
var action = frm.attr("action");
var serializedForm = frm.serialize();
$.post(action, serializedForm, function() {
alert('Call completed');
});
return false;
});
Если я определю свою форму следующим образом:
<form id="formFoo" action="/SomeController/SomeOtherAction" method="post">
и мои действия следующим образом:
public void SomeOtherAction()
{
var myEntity=new MyEntity();
UpdateModel(myEntity);
}
Затем вызывается мое действие, и мой объект заполняется правильно, но его поле идентификатора не заполняется, поэтому я не знаю, какую сущность я обновляю.
Если я изменю свою форму на:
<form id="formFoo" action="/SomeController/Edit" method="post">
и у меня есть действие Правка, определенное как:
[Authorize,AcceptVerbs(HttpVerbs.Post)]
public void Edit(int id, FormCollection collection)
Тогда мое действие никогда не вызывается JQuery.
Полагаю, я мог бы каким-то образом извлечь параметр ID из строки запроса и вставить это в данные, которые я отправляю обратно в форму, но это выглядит очень уродливо. Или есть ли способ получить поле идентификатора, когда я в своем действии SomeOtherAction? Или я просто все делаю неправильно?