У меня есть 2 формы на одной странице. Одна из них - это форма в частичном представлении, которая отображается с помощью дочернего действия, которое мы назовем этой PodForm. Второй отображается текущим действием.
Итак, мой код выглядит примерно так (пожалуйста, игнорируйте имена и т. Д., Это пример кода):
Form.cshtml
@model MyProject.Models.FormInputModel
@using(Html.BeginForm("Form","Main",FormMethod.Post))
{
@Html.TextBoxFor(x=>x.AField)
@* Some other fields *@
<input type="submit"/>
}
<div class="sidebar">
@Html.Action("PodForm","Pod")
</div>
PodForm.cshtml
@model MyProject.Models.PodFormInputModel
@using(Html.BeginForm("PodForm","Pod",FormMethod.Post))
{
@Html.TextBoxFor(x=>x.Name)
@* Some other fields *@
<input type="submit"/>
}
Когда я нажимаю "Отправить" в главной форме, запускается метод действия PodForm. Что происходит?
Редактировать - По запросу в комментариях :
Сгенерированная разметка выглядит следующим образом.
<form action="/Main/Form" encoding="multipart/form-data" method="POST">
<input type="text" name="AField" />
<input type="submit" />
</form>
<div class="sidebar">
<form action="/Pod/PodForm" method="POST">
<input type="text" name="Name" />
<input type="submit" />
</form>
</div>
Действия контроллера
MainController (не фактическое имя) имеет действие под названием "Form"
public MainController : Controller
{
public ActionResult Form()
{
return View();
}
[HttpPost]
public ActionResult Form()
{
if(ModelState.IsValid)
{
//Save
}
return View();
}
}
«PodController» (не фактическое имя) имеет действие под названием «PodForm». Причина, по которой HttpPost не возвращает View, заключается в том, что выполнение этого из дочернего действия возвращает только частичное представление, а не то, что я хочу.
public PodController : Controller
{
public ActionResult PodForm()
{
return View();
}
[HttpPost]
public ActionResult PodForm(PodFormInputModel model)
{
if(ModelState.IsValid)
{
//Save the thing
return RedirectToAction(Request.HttpReferrer.ToString()).AndFlash("Saved");
}
return RedirectToAction(Request.HttpReferrer.ToString()).AndFlash("Not saved");
}
}
ОБНОВЛЕНИЕ: я выяснил, что первый метод действия вызывается , но потому что он возвращает View (), механизм представления вызывает метод действия PodForm как Post, а не как Get который вызывает логику отправки. Weird.