2011-01-21 111 views
2

我有這個控制器的方法創建ASP.NET MVC ModelState.IsValid不起作用

[HttpPost] 
    public ActionResult Create(Topic topic) 
    { 
     if (ModelState.IsValid) 
     { 
      topicRepo.Add(topic); 
      topicRepo.Save(); 

      return RedirectToAction("Details", new { id = topic.ID }); 
     } 
     return View(topic); 
    } 

這對於編輯

 [HttpPost] 
     public ActionResult Edit(int id, FormCollection formCollection) 
     { 
      Topic topic = topicRepo.getTopic(id); 
      if (ModelState.IsValid) 
      { 
       UpdateModel<Topic>(topic); 
       topicRepo.Save(); 
       return RedirectToAction("Details", new { id = topic.ID }); 
      } 
      return View(topic); 
     } 

這兩種方法都使用共同的部分頁面(的.ascx) 。

驗證的工作原理,當我嘗試創建話題,但是當我嘗試編輯

回答

8

這是正常的不正常工作。在第一個示例中,您將使用模型作爲操作參數。當默認模型聯編程序試圖從請求中綁定此模型時,它將自動調用驗證,並且當您輸入動作時,已經分配了ModelState.IsValid

在第二個示例中,您的動作不採用模型,只有一個鍵/值集合且沒有模型驗證是沒有意義的。通過UpdateModel<TModel>方法觸發驗證,在您的示例中調用ModelState.IsValid後調用

所以,你可以試試這個:

[HttpPost] 
public ActionResult Edit(int id) 
{ 
    Topic topic = topicRepo.getTopic(id); 
    UpdateModel<Topic>(topic); 
    if (ModelState.IsValid) 
    { 
     topicRepo.Save(); 
     return RedirectToAction("Details", new { id = topic.ID }); 
    } 
    return View(topic); 
} 
+0

太感謝你了! – 2011-01-21 15:38:18

相關問題