StringLength属性行为

Jop*_*per 14 validation asp.net-mvc-3

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

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

基本上它是在默认的asp.net mvc 3.0模板中声明的方式(它们只有最大值100).

因此,如果字符串包含少于3个字符,则显示错误消息将是

"The PropertyName  must be at least 3 characters long."
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下我没有看到任何问题

但是如果字符串长度超过10,显示消息仍然是

"The PropertyName  must be at least 3 characters long."
Run Code Online (Sandbox Code Playgroud)

所以现在变得不正确了

但是,如果我将消息模板更改为类似的东西:

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

两种情况的错误消息都是这样的:

"The PropertyName must be at least 3 characters long and maximum 10 characters long"
Run Code Online (Sandbox Code Playgroud)

它也不是那么好

1)信息很长

2)最好为每个案例显示单独的信息,问题是我怎么能做帽子?

有什么方法可以显示两条不同的消息,一条消息,如果长度小于最小值,另一条消息长度大于最大值?

我能看到的只有一个办法解决这个问题是宣布两个独立的StringLength属性,一会检查最小的另一个最大,但它是不可能的方法添加两个相同的属性,还我会去MinLengthMaxLength属性,但它们不产生不显眼的属性.所以看起来我应该编写自定义验证属性

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

doh*_*ivu 24

您可以使用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; }
Run Code Online (Sandbox Code Playgroud)

  • MinLength和MaxLength不会生成不显眼的验证属性 (4认同)