2011-03-25 41 views
1

多個數據註釋我試圖使用MVC 3中的數據說明。因此,我希望有一個單一的財產多個註解。首先,我要檢查用戶輸入的用戶名的長度,如果名稱不在3到13個字符的範圍內,則顯示相應的錯誤消息。MVC - 在同一財產

當第一次檢查已取得,我想檢查是否與正則表達式的第二個註解。意思是,我將檢查3到13之間的字符串的正則表達式,對於其他任何情況,我將顯示第一條錯誤消息。

[Required(ErrorMessage = "Enter a username")] 
[StringLength(13, MinimumLength = 3, ErrorMessage="Username must be between 3 and 13")] 
[RegularExpression("^[a-z0-9.]{3,15}$", ErrorMessage = "Only the letters (a-z), numbers (0-9) and dots (.), are allowed")] 
[DataType(DataType.Text)] 
[Display(Name = "Username")] 
public string UserName { get; set; } 

現在,當我在用戶名字段中輸入單個字符時,顯示正確的消息。輸入第二個字符時,顯示來自reqex的錯誤消息?爲什麼?這可以以不同的方式完成嗎?

謝謝,

問候。

+0

回發或客戶端驗證? – smartcaveman 2011-03-25 23:51:58

+0

其實呢,都是?那可能嗎? – Nima 2011-04-05 19:27:56

回答

0

也許你的意思是你想檢查特定順序的屬性?我不確定預期的排序是否可能。您可以隨時編寫自定義驗證(使用cusomt屬性來組合檢查),這將使您完全控制確切的消息。

順便說一句,我在參考了正則表達式假設你的意思是「正則表達式」而不是「reqex」?那麼這個消息就會顯得很有意義,因爲它是正則表達式所需的最小值。你可以取消StringLength屬性,因爲它與正則表達式是多餘的。

2

您可以創建自己的驗證器,該驗證器派生自ValidationAttribute。然後你可以實現你喜歡的任何邏輯。

看到第三個發表本thread

0

最簡單的答案是,也許是最好的。只需從正則表達式中刪除長度要求,它將不會根據長度進行標記。允許StringLength註釋來完成這項工作。

[Required(ErrorMessage = "Enter a username")] 
[StringLength(13, MinimumLength = 3, ErrorMessage="Username must be between 3 and 13")] 
[RegularExpression("^[a-z0-9.]$", ErrorMessage = "Only the letters (a-z), numbers (0-9) and dots (.), are allowed")] 
[DataType(DataType.Text)] 
[Display(Name = "Username")] 
public string UserName { get; set; }