2010-09-25 65 views
2

典型場景,發佈到檢查ModelState.IsValid並且是否保存到數據庫的操作。驗證規則在模型中設置爲數據註釋。如何最好地使用asp.net MVC 2的數據註釋驗證來處理後期數據驗證?

這是我的問題。我有一個不能超過400個字符的數據字段。數據註釋強制執行此操作,以及客戶端的jQuery驗證。

用戶輸入395個字符,包括幾個換行符。我的應用程序將這些換行符變成<br />標籤。但那是在UpdateModel()被調用之後。由於<br />標記比換行符長,因此它會在UpdateModel上通過驗證,但在實際嘗試保存到數據庫時會失敗。

代碼基本上是這樣的(從NerdDinner範例):

[HttpPost, Authorize] 
public ActionResult Edit(int id, FormCollection collection) { 

    Dinner dinner = dinnerRepository.GetDinner(id); 

    try { 
     UpdateModel(dinner, "Dinner"); 
     dinner.Description = dinner.Description.Replace("\n", "<br />"); 
     //... now it's over length limit 

     dinnerRepository.Save(); 

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

當異常被拋出,不填充ModelState中違規從數據註解,所以沒有消息顯示給我的用戶。

什麼是處理這個問題的好方法?

回答

3

你應該能夠編寫代碼就像...

if (TryUpdateModel(dinner, "Dinner")) { 
    dinner.Description = dinner.Description.Replace("\n", "<br />"); 
    //... now it's over length limit 

    if (TryValidateModel(dinner)) { 
     dinnerRepository.Save(); 
     return RedirectToAction("Details", new { id=dinner.DinnerID }); 
    } 
} 

return View(dinner); 

這擺脫了嘗試{}塊,並允許你來驗證你的模型。

+0

哦,我不知道TryValidateModel,將會給它一個鏡頭。謝謝! – Chaddeus 2010-09-25 14:14:41

+0

TryValidateModel很神奇!喜歡TryUpdateModel和TryValidateModel流程。萬分感謝! – Chaddeus 2010-09-25 14:57:03

相關問題