2014-09-02 148 views
0

我正在使用MVC 4表單:表單提交按鈕從不提交表單

查看:

@model etc.Models.FormViewModel 

@using (Html.BeginForm("NewForm", "Form", FormMethod.Post)) 
{ 
     // html helpers here ... 

     <div class="row"> 
      <div class="form-group col-lg-2 col-lg-offset-5"> 
       <button type="submit" class="btn" value="Submit">Submit</button> 
      </div> 
     </div> 
} 

控制器:

[HttpPost] 
    public ActionResult NewForm() 
    { 

     FormViewModel newForm = new FormViewModel(); //this will never get hit 
     return View(); 
    } 

點擊提交不做任何事情。它只是讓頁面向上滾動一點,並專注於特定的輸入字段。當我填充該字段和其他字段,然後再次單擊提交時,無論我在控制器操作的頂部是否包含[HttpPost],都不會調用NewForm()。我該如何做到這一點,以便當你點擊提交按鈕時,NewForm()被調用?我如何真正將表單數據傳遞給NewForm()?

+1

確認您在瀏覽器的調試網絡監視器或使用Fiddler等工具發出POST請求。 – Jasen 2014-09-02 18:14:22

+0

我剛纔嘗試了這個,但它並沒有觸發任何POST請求。 – alex 2014-09-02 18:20:28

+0

你有任何javascript攔截提交請求?如果您使用任何數據驗證,請嘗試關閉任何數據驗證。 – Jasen 2014-09-02 18:22:08

回答

0

問題原來是由於MVC 4 服務器端 客戶端驗證錯誤導致表單提交被阻止。在沒有使用@Html.ValidationSummary的情況下,我很難在當時看到這些錯誤。

+1

如果用HttpPost屬性標記的NewForm()控制器方法永遠不會被觸發,那麼它是防止表單提交的客戶端驗證規則,而不是服務器端驗證規則。服務器端驗證規則會在NewForm()方法內部觸發,並且可以使用ModelState進行檢查。驗證摘要在可用時顯示客戶端驗證錯誤,如果您有服務器端驗證發生並向ModelState添加錯誤,則驗證摘要也會顯示這些錯誤。瞭解其中的差異很重要。 – 2014-10-07 16:41:23