Asp.net mvc MVC-同一属性上的多个数据批注

Asp.net mvc MVC-同一属性上的多个数据批注,asp.net-mvc,validation,asp.net-mvc-3,annotations,Asp.net Mvc,Validation,Asp.net Mvc 3,Annotations,我正在尝试使用MVC3中的数据注释。因此,我希望在一个属性上有多个注释。首先,我想检查用户输入的用户名的长度,如果用户名不在3到13个字符的范围内,则显示相应的错误消息 第一次检查完成后,我想用正则表达式检查第二次注释。也就是说,我将检查正则表达式中3到13之间的字符串,对于其他任何内容,我将显示第一条错误消息 [Required(ErrorMessage = "Enter a username")] [StringLength(13, MinimumLength = 3, ErrorMessa

我正在尝试使用MVC3中的数据注释。因此,我希望在一个属性上有多个注释。首先,我想检查用户输入的用户名的长度,如果用户名不在3到13个字符的范围内,则显示相应的错误消息

第一次检查完成后,我想用正则表达式检查第二次注释。也就是说,我将检查正则表达式中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; }
现在,当我在用户名字段中输入单个字符时,将显示正确的消息。输入第二个字符时,将显示来自REQUEX的错误消息?为什么?这可以用另一种方式实现吗

谢谢


问候

您的意思可能是要按特定顺序检查属性?我不确定是否可以预定。您始终可以编写自定义验证(使用cusomt属性组合检查),这将使您能够完全控制确切的消息


顺便说一下,我想你是指正则表达式中的“regex”而不是“reqex”?那么,如果该消息显示少于3个字符,这将非常有意义,因为它是正则表达式所要求的最小值。您可以取消StringLength属性,因为它与正则表达式是冗余的。

您可以创建自己的从ValidationAttribute派生的验证器。然后,您可以实现您喜欢的任何逻辑


请看这篇文章的第三篇

最简单的答案也许是最好的。只需从正则表达式中删除长度要求,它就不会基于长度进行标记。允许
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; }

在回发或客户端验证程序上?实际上,在两者上?可能吗?