MaxLength属性不生成客户端验证属性

Mat*_*ins 77 c# validation asp.net-mvc model-validation asp.net-mvc-3

我对ASP.NET MVC3客户端验证有一个奇怪的问题.我有以下课程:

public class Instrument : BaseObject
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Name is required.")]
    [MaxLength(40, ErrorMessage = "Name cannot be longer than 40 characters.")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

从我的观点来看:

<div class="editor-field">
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>
Run Code Online (Sandbox Code Playgroud)

这是我为此字段的文本框获取的生成的HTML:

<input class="text-box single-line" data-val="true" data-val-required="Name is required." id="Name" name="Name" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

没有迹象MaxLengthAttribute,但其他一切似乎都在起作用.

有什么想法会出错吗?

Dar*_*rov 144

尝试使用该[StringLength]属性:

[Required(ErrorMessage = "Name is required.")]
[StringLength(40, ErrorMessage = "Name cannot be longer than 40 characters.")]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是为了验证目的.如果要在输入上设置例如maxlength属性,可以编写自定义数据注释元数据提供程序,如本文所示,并自定义默认模板.

  • @JeremyHolovacs,如果你不想指定最大值,你只需指定`int.MaxValue`作为最大长度,然后设置[MinLength](http://msdn.microsoft.com/en-us/library/system. componentmodel.dataannotations.stringlengthattribute.minimumlength.aspx)属性到你需要的最小长度.所以,不,它不仅仅是一个功能性的解决方法.它也适用于实践. (5认同)
  • 非常感谢你.如果有人想知道,我检查EF Code First是否创建了具有StringLength属性强加的最大长度的DB列.:) (3认同)

Nic*_*son 36

我只是用了一段jquery来解决这个问题.

$("input[data-val-length-max]").each(function (index, element) {
   var length = parseInt($(this).attr("data-val-length-max"));
   $(this).prop("maxlength", length);
});
Run Code Online (Sandbox Code Playgroud)

选择器查找具有data-val-length-max属性集的所有元素.这是StringLength验证属性将设置的属性.

每个循环遍历这些匹配,并将解析该属性的值并将其分配给应该已设置的mxlength属性.

只需将此添加到您的文档就绪功能,您就可以了.

  • 你可以使用.data("val-length-max")代替.attr("data-val-length-max"):) (4认同)

Mic*_*tov 8

MaxLengthAttribute自MVC 5.1更新后正在运行:更改备注

  • 它现在可用于验证,但MVC仍未将`maxlength`属性应用于`input`元素. (14认同)

Sai*_*ume 6

在MVC 4中如果你想在输入类型文本中使用maxlenght?您可以 !

@Html.TextBoxFor(model => model.Item3.ADR_ZIP, new { @class = "gui-input ui-oblig", @maxlength = "5" })
Run Code Online (Sandbox Code Playgroud)