2009-05-19 70 views
126

Professional ASP.NET MVC 1.0NerdDinner例如有創建一個新的晚餐,複製波紋管(自由的NerdDinner版第89頁)的方法。什麼是ModelState.IsValid在NerdDinner中的ASP.NET MVC中有效?

有它檢查ModelState.IsValid真正的。它似乎檢查模型是否對數據庫有效(也就是說,它捕獲數據類型轉換,如具有無效格式的日期,但不包括業務規則)。真的嗎?

提交表單時,如果日期中有錯誤,ModelState.IsValid將爲false,並且您將返回一個錯誤,但僅針對日期,因爲AddRuleViolations從未執行過。如果您完全刪除了對ModelState.IsValid的檢查,那麼您將得到所有錯誤(由於例外),包括在其無效日期的標記。那麼,爲什麼在那裏檢查ModelState.IsValid呢?我錯過了什麼嗎?

// 
// POST: /Dinners/Create 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Dinner dinner) { 
    if (ModelState.IsValid) { 
     try { 
      dinner.HostedBy = "SomeUser"; 

      dinnerRepository.Add(dinner); 
      dinnerRepository.Save(); 

      return RedirectToAction("Details", new {id = dinner.DinnerID }); 
     } catch { 
      ModelState.AddRuleViolations(dinner.GetRuleViolations()); 
     } 
    } 
    return View(dinner); 
} 

回答

124

ModelState.IsValid告訴你,如果任何模型誤差已被添加到ModelState

默認的模型粘合劑將增加對基本類型轉換問題的一些錯誤(例如,通過爲一些非數字這是一個「INT」)。您可以根據您使用的任何驗證系統更完整地填充ModelState。

樣本DataAnnotations模型活頁夾將填充模型狀態,其中驗證錯誤取自模型上的DataAnnotations屬性。

+0

布拉德有什麼辦法找出如果裝飾有DataAnnotations模型「的IsValid 「沒有ModelState。 (比方說的對象是從一個文件中加載或在控制檯應用程序等中使用) – 2011-05-10 03:53:44

+1

否,ModelState.IsValid是知道是否有任何的驗證(或數據轉換)結合模型期間的錯誤的唯一途徑。 – 2011-05-16 04:51:38

相關問題