2010-08-12 46 views
7

如何在MVC 2中设置文本框的MaxLength和Size? 在SO上有几个关于这个问题的问题。作为MVC的新手,我发现没有任何一种解决方案看起来可行 - 可能是因为我没有做对。MVC 2 EditorFor MaxLength和Size

在任何情况下,我想知道是否有更好的解决方案,因为之前的问题似乎是在MVC 2处于测试阶段时被问到的。

回答

9

这很容易,你只要有多余的htmlAtttributes

<%= Html.TextBoxFor(model => model.Member, new { maxlength = "20", width = "15" }) %> 
<%= Html.TextBoxFor(model => model.Member, new { maxlength = "20", style = "width:200px;" }) %> 
+0

令人惊叹!他们确实在Beta版后修复了它。即便如此,我发现只有第二条线在您的解决方案中起作用。此外,该解决方案只适用于TextBoxFor而不适用于EditorFor,尽管现在我没有问题。 – arame3333 2010-08-12 10:00:21

+0

您可以像那样传递任何html属性,但请记住,它们必须对HTML助手生成的指定html元素有效 - 在这种情况下,它是输入。 – 2010-08-12 10:03:31

+7

主题标题说EditorFor - 回答说TextBoxFor。仅供参考 - 除非使用System.ComponentModel.DataAnnotations“[StringLength(5,ErrorMessage =”必须是5个或更少的字符“)]”装饰属性,否则额外的HtmlAttributes不能与EditorFor一起使用,否则需要更改为TextBoxFor,然后我们可以使用答案中提到的额外HtmlAttributes。 – 2012-02-06 21:12:35

0

上述解决方案的工作,但如果你有一个领域的多个实例,它会更容易将其设置在模型或视图模型。修改实际模型时要小心,因为它们在更新时会变得不稳定。

示例: 在模型或视图模型中。

[DisplayName("Notes")] 
[MaxLength(500, ErrorMessage="Maximum length of notes field is 500 characters...")] 
[DataType(DataType.MultilineText)] 
public string Notes { get; set; } 

要验证它提交,你需要在你的web.config中。

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

确保你的地方引用验证JS文件,最好在共享/ _layout或页面本身...

<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

最后请确保您包括在CSHTML确认消息。

@Html.EditorFor(model => model.Notes, new { htmlAttributes = new { @class = "form-control", rows = "5", @placeholder = "Notes", title = "Enter any notes..." } }) 
@Html.ValidationMessageFor(model => model.Notes, "", new { @class = "text-danger" }) 

构建解决方案并进行测试。希望这有助于任何人寻找解决方案。