34

我在 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

4 回答 4

55

有没有办法只指定最小长度?也许我可以使用另一个属性?

使用标准数据注释,否。您必须指定最大长度。只有其他参数是可选的。

在这种情况下,我会推荐这样的东西:

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

您还可以使用像这样的Regex(正则表达式)属性:

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

更多信息:使用正则表达式的密码强度验证

于 2012-07-09T23:13:36.220 回答
16

为此,还有 [MinLength(7)] 属性。

来源:https ://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.minlengthattribute(v=vs.110).aspx

于 2016-12-08T19:43:05.087 回答
1

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

应该看起来像:

@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 文件。

希望这可以帮助 :)

于 2016-10-15T15:44:58.540 回答
0

干得好弗朗索瓦,看来您不能使用数据注释在输入字段上发出 maxlength 属性。它只提供客户端验证。使用带有 HTML 属性的 maxlength 创建了正确设置 maxlength 的输入字段。

@Html.EditorFor(model => model.Audit_Document_Action, new { htmlAttributes = new { @class = "form-control", @maxlength = "10" } })
于 2018-04-09T02:06:11.407 回答