@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
?
答案 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" } })
答案 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属性并正确分配它们。