我刚刚注意到MVC 5在使用EditorFor时对输入字段使用了不同的类。我认为它来自较低版本的bootstrap,所以当前的类并没有真正加起来。
我在说这个:
<div class="form-group">
@Html.LabelFor(model => model.Contact.CellphoneNo, new { @class = "control-label col-md-4"})
<div class="col-md-8">
@Html.EditorFor(model => model.Contact.CellphoneNo)
@Html.ValidationMessageFor(model => model.Contact.CellphoneNo)
</div>
</div>
结果如下:
<div class="form-group">
<label class="control-label col-md-4" for="Contact_CellphoneNo">CellphoneNo</label>
<div class="col-md-8">
<input class="text-box single-line" id="Contact_CellphoneNo" name="Contact.CellphoneNo" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="Contact.CellphoneNo" data-valmsg-replace="true"></span>
</div>
</div>
当您查看代码时,它有一个“文本框”类而不是Bootstrap3的“表单控件”
我想我在某处读到这是因为MVC5在最后一分钟切换到Bootstrap 3的事实。
问题是:如何手动更改该课程?我希望能够将文本框更改为表单控件。我不能真正找到代码。
我已经尝试了这个
@Html.EditorFor(model => model.CivilStatus, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CivilStatus)
这似乎不起作用。我很难过。有什么想法吗?
提前致谢!
答案 0 :(得分:50)
EditorFor不接受HTML属性作为参数。您使用的参数实际上是additionalViewData
使用TextBoxFor代替
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
修改强>
从MVC 5.1开始,可以使用此语法将HTML属性传递给EditorTemplate
@Html.EditorFor(m => m.UserName, new { htmlAttributes = new { @class = "form-control" } })
答案 1 :(得分:0)
如果您使用的是MVC 5或之前的版本,请使用@Html.TextBoxFor
代替@Html.EditorFor
,如下面的代码所示:
@Html.TextBoxFor(model => model.CivilStatus,new { @class = "form-control" }
如果你还必须将它绑定到knockout.js modelview属性,那么:
@Html.TextBoxFor(model => model.CivilStatus, new { data_bind="value: author.civilStatus", @class = "form-control" })
我在MVC4中使用过它,它对我有用:
@Html.TextBoxFor(model => model.FirstName, new { data_bind="value: author.firstName", @class = "form-control" })