2009-12-08 106 views
0

我正在使用來自link text的MVC驗證庫。我選擇這個庫是因爲我也使用.NetTiers,它使用MS企業庫驗證塊生成所有的驗證屬性。MVC模型綁定

它工作正常,除了該模型綁定自動驗證對象並填充驗證摘要。我相信這是正常的行爲。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register([Bind()]NetTiersObject obj) 
{ 
    return View(); 
} 

驗證庫還具有如下記載的方法:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register([Bind()]NetTiersObject obj) 
{ 
    try 
    { 
     obj.Validate<NetTiersObject>(); 
    } 
    catch (EntityValidationException ex) 
    { 
     ViewData.ModelState.PopulateWithErrors(ex); 
    } 
    return View(); 
} 

這也能正常工作。

我的問題是,當使用驗證庫的方法它重複錯誤消息。當只使用模型綁定時,錯誤消息顯得很奇怪。錯誤在消息中具有屬性名稱。

所以,我想我應該要麼格式化模型綁定錯誤消息,要麼完全禁用模型綁定。

任何建議,幫助?

謝謝。

回答

0

我找到了爲什麼我的ModelState無效的答案。表單元素不匹配模型,這是ModelState立即失效的唯一方法。

如果我找到更多細節,我會更新這篇文章。

0

你有沒有嘗試:

/*At the Point the ModelState should be Valid(TRUE) 
     because we still didn't enforce any validations */ 
    var v = ModelState.IsValid; 

try 
    { 
     obj.Validate<NetTiersObject>(); 
    } 
    catch (EntityValidationException ex) 
    { 
     ViewData.ModelState.PopulateWithErrors(ex); 
    } 

,並檢查v是真正的,也是應該的。 如果它是真的,那麼obj.Validate<NetTiersObject>();做錯了,因爲它只填充重複的錯誤。

我的問題是使用 驗證庫的方法時,它 重複的錯誤消息。當 只是使用該模型綁定錯誤 消息出現奇怪。錯誤 在消息中具有屬性名稱。

它很奇怪,因爲modelBinding不應該填充模型錯誤,至少如果您沒有使用自定義模型綁定或嘗試將數據保存到數據庫而不驗證字段。

+0

在您的第一個示例中,它立即無效。如果我將FormCollection作爲操作參數傳遞,那麼modelstate是有效的。沒有自定義模型綁定,這只是驗證時的一個問題。謝謝你的幫助。 – 2009-12-09 00:48:44