数据注释的StringLength属性MVC - 没有最大值

36

我正在MVC4中使用数据注释进行模型验证,目前正在使用StringLengthAttribute,但是我不想指定最大值(当前设置为50),但是想要指定最小字符串长度值。

是否有一种方法只指定最小长度?也许可以使用另一个属性?

我的当前代码是:

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Confirm New Password")]
    [StringLength(50, MinimumLength = 7)]
    [CompareAttribute("NewPassword", ErrorMessage = "The New Password and Confirm New Password fields did not match.")]
    public string ConfirmNewPassword { get; set; }
4个回答

59

有没有一种方法只指定最小长度?也许有其他属性可以使用吗?

使用标准数据注释,不行。您必须指定MaximumLength。仅其他参数是可选的。

在这种情况下,我建议像这样做:

[StringLength(int.MaxValue, MinimumLength = 7)]

你也可以使用类似于这样的正则表达式属性:

[RegularExpression(@"^(?:.*[a-z]){7,}$", ErrorMessage = "String length must be greater than or equal 7 characters.")]

更多相关信息请参考这里:使用正则表达式进行密码强度验证


谢谢Leniel。我已经采用了你建议的正则表达式来控制字符串长度。 - Mr-DC


1

您是否考虑在视图中删除数据注释并为Html.TextBoxFor元素添加Html属性?

应该看起来像这样:

@Html.TextBoxFor(model => model.Full_Name, new { htmlAttributes = new { @class = "form-control", @minlength = "10" } })

@Html.TextBoxFor(model => model.Full_Name, new { @class = "form-control",  @minlength = "10" } })

最小长度为10个字符。

我喜欢在视图中添加HTML属性,因为我可以快速看到它的影响,而不会干扰你的数据库,如果使用迁移(代码优先方法),也不需要运行迁移和数据库更新。

请记住,当您将EditorFor更改为TextBoxFor时,您将失去样式,但这应该是一个简单的修复,您可以将样式添加到视图中或将样式添加到CSS文件中。

希望这有所帮助 :)


2
这并不在服务器上执行限制。 - niico

0
不错的工作,Francois, 看起来你不能使用数据注释在输入字段上发出maxlength属性。它只提供客户端验证。 使用HTML属性的maxlength创建输入字段时,maxlength设置正确。
@Html.EditorFor(model => model.Audit_Document_Action, new { htmlAttributes = new { @class = "form-control", @maxlength = "10" } })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接