MVC5和Bootstrap3:Html.EditorFor错误的类?如何改变?

时间:2014-01-31 14:49:58

标签: twitter-bootstrap-3 asp.net-mvc-5 asp.net-mvc-5.1

我刚刚注意到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)

这似乎不起作用。我很难过。有什么想法吗?

提前致谢!

2 个答案:

答案 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" })