我在同一页面上有 2 个表格。一种是局部视图中的表单,它通过我们称之为 PodForm 的子操作呈现。第二个由当前动作呈现。
所以我的代码看起来有点像这样(请忽略名称等,这是示例代码):
表单.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 调用。奇怪的。