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