ASP.NET MVC5 Razor不适用于类

时间:2015-07-15 20:17:15

标签: c# asp.net-mvc razor

@Html.EditorFor(model => model.Id, new { @class = "form-control" } )

编译到

<input class="text-box single-line" 
    data-val="true" data-val-email="The Id field is not a valid e-mail address." 
    data-val-required="The Id field is required." 
    id="Id" name="Id" value="" type="email">

如何让Razor应用课程form-control

3 个答案:

答案 0 :(得分:5)

您应该使用@Html.TextBoxFor html帮助器。

使用@Html.EditorFor,您无法执行此操作。

发生这种情况的原因是EditorFor html助手首先要找出应该为模型属性生成的适当html元素。因此,它不能将css类分配给未知元素。另一方面,TextBoxFor生成一个带有text类型的input元素。因此,它可以应用你从一开始就选择的css类。

例如,如果我们有这个:

@Html.EditorFor(model => model.IsAdult)

生成的元素将是checkbox类型的输入元素(我假设IsAdult是布尔类型)。

答案 1 :(得分:3)

MVC 5.1 开始,您可以执行以下操作。

@Html.EditorFor(model => model.Id, new { htmlAttributes = new { @class = "form-control" } })

请参阅What's new in ASP.NET MVC 5.1

答案 2 :(得分:3)

Html.EditorFor有一些不同的重载。 one you are using有这个签名:

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    object additionalViewData
)

对于html属性,additionalViewData ,它已传递到路由引擎。

事实证明,none of the overloads允许您指定html属性。原因是因为EditorFor需要决定写入页面的编辑器控件类型。它可能是文本框,下拉列表或复选框。每个控件都是不同的,因此当你不知道将使用什么html元素时,允许html属性赋值是没有意义的。

最好的做法是使用更具体的内容,例如TextBoxFor

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

This方法将允许您传递html属性并正确分配它们。