MVC5 и Bootstrap3: Html.EditorFor неправильный класс? Как изменить?

Я только заметил, что MVC 5 использует другой класс для полей ввода при использовании редактора. Я думаю, что это из более низкой версии бутстрапа, поэтому текущий класс действительно не складывается.

Я говорю об этом:

<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 " form-control "

Я думаю, что я где-то читал, что это произошло из-за того, что MVC5 переключился на Bootstrap 3 в последнюю минуту или что-то в этом роде.


Вопрос: как мне изменить этот класс вручную? Я хочу иметь возможность изменять текстовое поле для управления формой. Однако я не могу найти код.

Я уже пробовал уже

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

Это не работает. Я в тупике. Любые идеи?

Спасибо заранее!

Ответы

Ответ 1

EditorFor не принимает атрибуты HTML в качестве параметра. Фактически вы используете additionalViewData

Используйте вместо этого TextBoxFor

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

Edit

Как и в MVC 5.1, атрибуты HTML могут быть переданы в EditorTemplate с использованием этого синтаксиса

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

Ответ 2

Если вы используете 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" })