2013-01-23 23 views
0

在我的asp.net mvc 3項目中,我對需要驗證的屬性使用[Required]屬性。此外,我使用ModelState.AddModelError將錯誤添加到相同的屬性(具有屬性)。第二種方法添加的錯誤不會顯示出來。可能是什麼原因?我可以使用屬性和ModelState.AddModelError來驗證asp.net mvc中的模型屬性嗎?

這裏是代碼:在視圖

@Html.EditorFor(i => i.CurrentItem.Product.Name) 
     Html.ValidationMessageFor(i => i.CurrentItem.Product.Name) 
     @Html.ValidationMessage("Name") 

1)attibute

[Required(ErrorMessage = "Product name is required")] 
     public string Name { get; set; } 

2屬性)在控制器的操作方法

if (p.Name.Length < 3) 
    ModelState.AddModelError("Name", 
     "Product name should be at least 3 characters long"); 

3)所以,馬布我不能se屬性和ModelState都是?

回答

1

您可以通過添加一個StringLength屬性實現同樣的事情:

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)] 

哪裏100是最大長度和3最小長度。

+0

謝謝!很好的回答!也更簡潔的方式來處理這個問題 –

1

至於爲什麼你的實現不起作用,這是因爲AddModelError的第一個參數應該是你的屬性的完全限定路徑,這個路徑是基於View強類型的屬性。在你的情況下,我相信它會是「CurrentItem.Product.Name」

我推薦使用Fluent驗證庫。它允許您編寫自定義驗證併爲您處理添加到ModelState。這是很不錯的。

流利的驗證:http://fluentvalidation.codeplex.com/

相關問題