我在同一頁上有2個表單。一種是在部分視圖中的表單,它通過一個我們稱之爲PodForm的子動作來呈現。第二個是由當前行動呈現的。ASP.NET MVC3:頁面上的2個表單,提交觸發器錯誤
所以我的代碼看起來有點像這樣(請忽略名稱等,這是示例代碼):
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」(不是實際的名稱)有一個名爲 「表」
public MainController : Controller { public ActionResult Form() { return View(); } [HttpPost] public ActionResult Form() { if(ModelState.IsValid) { //Save } return View(); } }
的 「PodController」(不是實際的名稱)的動作有稱爲「PodForm」的動作。 HttpPost不返回視圖的原因是,從一個子操作返回只是部分視圖 - 不是我想要的。
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"); } }
更新:我已經想通了,第一個動作方法是叫,而是因爲它返回一個視圖()的視圖引擎調用PodForm操作方法的帖子,而不是作爲一個獲取哪個觸發提交邏輯。奇怪的。
只要你有兩個單獨的'表格'標籤,這應該只是工作。生成的HTML是什麼樣的? – JasCav 2011-05-09 17:46:52
在一個div裏面你調用FormPod動作,並在你的PodForm.cshtml中爲你的PodForm動作渲染表單。你的控制器有什麼行動? – frennky 2011-05-09 18:44:47
我相信生成的HTML不會在這裏。這將有所幫助。 – 2011-05-10 17:19:44