使用 Razor Html.EditorFor 时限制文本框中的字符长度

Posted

技术标签:

【中文标题】使用 Razor Html.EditorFor 时限制文本框中的字符长度【英文标题】:Limiting the length of characters in a textbox while using Razor's Html.EditFor 【发布时间】:2012-07-01 01:15:15 【问题描述】:

我正在使用 MVC3 的 Razor 引擎生成视图,并使用以下代码行生成文本框

 @html.EditorFor(model => model.AddressLine1)

在相关模型中,我使用数据注释属性将可接受的字符数限制为 55:

[StringLength(55)]
public string  AddressLine1  get; set; 

但是,这允许用户输入更长的地址,然后在他们尝试提交表单时通过验证消息被告知。如何将文本框限制为 55 个字符,以便用户无法输入更多内容?

如果我自己生成文本框,我会使用 maxlength 属性作为输入类型,但我不确定如何使用 Html.EditFor 方法获得相同的结果。

【问题讨论】:

【参考方案1】:

使用maxlengthTextBoxFor 代替EditorFor

EditorFor 没有允许这样做的重载。

这对你来说可能更有趣: maxlength attribute of a text box from the DataAnnotations StringLength in Asp.Net MVC

【讨论】:

【参考方案2】:
 @Html.TextBoxFor(model => model.AddressLine1, new maxlength = 55) 

最大长度 如果 type 属性的值为 text、email、search、password、tel 或 url,则该属性指定用户可以输入的最大字符数(以 Unicode 代码点表示);对于其他控件类型,它被忽略。

你也可以在不改变 DOM 的情况下使用 jQuery:

$('#AddressLine1').keypress(function()
    return this.value.length < 55
)

【讨论】:

它在 HTML4 中完美运行。我认为它们只是 HTMl5 中的新限制。 @RaphaëlAlthaus。你是对的,我在IE8中测试过,它是支持的。我编辑了。【参考方案3】:
$('#AddressLine1').keypress(function()
    return this.value.length < 55
)

此 jQuery 函数适用于网络浏览器,但在移动设备上不受支持,因此在创建每个人都可以访问的网站时,请考虑

【讨论】:

以上是关于使用 Razor Html.EditorFor 时限制文本框中的字符长度的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Razor 使 Editorfor 为浮点变量输入数字类型?

ASP.NET MVC3 - 带有@Html.EditorFor 的文本区域

当前日期和时间 - MVC razor 中的默认值

MVC5 @Html.EditorFor:第二个属性问题

Jquery - 在按钮单击时启用 editorFor 文本字段

如何在 Html.EditorFor 中使用占位符属性?