【发布时间】:2011-05-09 17:38:26
【问题描述】:
我在同一页面上有 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 操作方法。怎么回事?
编辑 - 根据 cmets 的要求:
-
生成的标记类似于以下内容。
<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 而不是作为获取触发提交逻辑的内容。很奇怪。
【问题讨论】:
-
只要你有两个独立的
form标签,这应该可以工作。生成的 HTML 是什么样的? -
在 div 中调用 FormPod 动作,在 PodForm.cshtml 中为 PodForm 动作呈现表单。您的控制器中有哪些操作?
-
我相信生成的 HTML 没有到达这里。那会很有帮助。
-
@Nick 抱歉,这是答案中的格式问题。
标签: forms asp.net-mvc-3 child-actions