2011-08-29 52 views
14

我有這樣的屬性,是檢查的最小和最大字符串長度:StringLength屬性行爲

[StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)] 
public string PropertyName {get; set;} 

基本上它是它是如何在默認asp.net的MVC宣佈3.0模板(他們只是有最大100)。

所以,如果字符串包含少於3個字符顯示錯誤信息將

"The PropertyName must be at least 3 characters long." 

所以我看不出有什麼問題,機智的在這種情況下

但比如果字符串長度會更10中的顯示信息仍然會

"The PropertyName must be at least 3 characters long." 

所以越來越不是現在糾正

但是,如果我更改郵件模板,這樣的事情:

[StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long and maximum {1} characters long", MinimumLength = 3)] 

兩種情況下該錯誤消息將是這樣的:

"The PropertyName must be at least 3 characters long and maximum 10 characters long" 

而且它也不是那麼好,以及

1)該消息是長

2)這將是更好地爲每個個案顯示單獨的消息左右,問題是我怎麼能這樣做的帽子?

是否有任何方式我可以顯示兩個不同的消息,如果長度小於最小的一個消息,並且另一消息是長度大於最大更大?

我能看到的只有一個辦法解決這個問題是宣佈兩個獨立StringLength屬性一會檢查是否有最低的另一個最大,但它是不可能的方法添加兩個相同的屬性,還我會去與MinLengthMaxLength屬性但它們不會產生不顯眼的屬性。所以看起來我應該寫我的自定義驗證屬性

但是,如果可能的話,在每種情況下(最小和最大)顯示兩個不同的消息以驗證一個StringLength驗證屬性會如何?

+2

儘管有點晚,也許使用較短的錯誤消息將工作。 '{0}必須是在{1}和{2} long.' – saluce

+0

我覺得顯示消息'的字段必須是3〜100之間characters'爲任何情況下使用完全足夠的字符。我認爲,如果你讓自己的屬性顯示不同的信息,你會花費太多時間在錯誤的地方。 –

+0

我怎樣才能做到同樣的事情,但沒有數字和特殊字符串,你的情況,你可以輸入三個數字,並會出現任何錯誤,但我只需要的話計數。 – mikrimouse

回答

23

您可以使用MINLENGTH個,屬性的MaxLength。它比兩個StringLength屬性更清晰

[MinLength(3, ErrorMessage="The {0} must be at least {2} characters long")] 
[MaxLength(10, ErrorMessage="The {0} must be maximum {2} characters long")]   
public string PropertyName { get; set; } 
+4

MinLength和MaxLength不會生成不顯眼的驗證屬性 – Joper

+0

這就是我發現的難題... –

+1

對於ASP.NET MVC 5.1:現在將支持用MinLength裝飾的屬性對字符串和數組類型的客戶端驗證, MaxLength屬性。[閱讀本文](http://www.asp.net/mvc/overview/releases/mvc51-release-notes#Unobtrusive)。 – dee