2011-05-09 53 views
1

我在同一頁上有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操作方法。這是怎麼回事?

編輯 - 正如評論要求:

  1. 生成的標記看起來類似於以下。

    <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> 
    
  2. 控制器動作

    的 「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操作方法的帖子,而不是作爲一個獲取哪個觸發提交邏輯。奇怪的。

+0

只要你有兩個單獨的'表格'標籤,這應該只是工作。生成的HTML是什麼樣的? – JasCav 2011-05-09 17:46:52

+0

在一個div裏面你調用FormPod動作,並在你的PodForm.cshtml中爲你的PodForm動作渲染表單。你的控制器有什麼行動? – frennky 2011-05-09 18:44:47

+0

我相信生成的HTML不會在這裏。這將有所幫助。 – 2011-05-10 17:19:44

回答

1

我已經發現主窗體的Action方法首先被擊中並正確響應。但是,當主表單的視圖呈現時,pod表單的子操作也呈現,但由於請求是一個帖子,所以呈現HttpPost操作方法,導致問題。

我已通過重命名HttpPost方法並更改PodForm.cshtml以使用此新操作方法來解決此問題。

相關問題