StringLength属性行为

时间:2011-08-29 03:32:13

标签: asp.net-mvc-3 validation

我有这样的属性,它检查最小和最大字符串长度:

    [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属性,一个会检查最小值,另一个最大值但是不可能在方法上添加两个相同的属性,我也会用{ {1}}和MinLength属性,但它们不会产生不显眼的属性。所以看起来我应该编写自定义验证属性

但如果可能的话,在每个案例(最小值和最大值)上显示一个MaxLength验证属性的两条不同消息会很棒,你觉得怎么样?

1 个答案:

答案 0 :(得分: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; }