Различия между Html.TextboxFor и Html.EditorFor в MVC и Razor
почему по умолчанию они были изменены при добавлении нового представления "редактировать"? Какие преимущества при использовании EditorFor() и TextboxFor()?
Я нашел это
по умолчанию для создания и редактирования лесов теперь используется Html.EditorFor helper вместо Html.TextBoxFor helper. Это улучшает поддержку метаданных на модели в виде
атрибуты аннотации данных, когда диалоговое окно "добавление вида" создает вид.
5 ответов:
преимущества
EditorForЭто то, что ваш код не привязан к<input type="text". Поэтому, если вы решите изменить что-то в аспекте того, как ваши текстовые поля отображаются, как обертывание их вdivвы можете просто написать пользовательский шаблон редактора (~/Views/Shared/EditorTemplates/string.cshtml) и все ваши текстовые поля в вашем приложении автоматически выиграют от этого изменения, тогда как если вы жестко закодированыHtml.TextBoxForвам придется изменить его везде. Вы также можете использовать аннотации данных для управления этим способом оказанный.
TextBoxFor: он будет отображаться как элемент html ввода текста, соответствующий указанному выражению. В простом слове он всегда будет отображаться как текстовое поле ввода независимо от типа данных свойства, которое получает привязку к элементу управления.
EditorFor: этот элемент управления немного умный. Он отображает разметку HTML на основе типа данных свойства. Например, предположим, что в модели есть булево свойство. Чтобы отобразить это свойство в представлении в виде флажка либо мы можем использовать CheckBoxFor или EditorFor. Оба будут генерировать одну и ту же разметку.
в чем преимущество использования в?
Как мы знаем, в зависимости от типа данных свойства он генерирует разметку html. Поэтому предположим, что завтра, если мы изменим тип данных свойства в модели, не нужно ничего менять в представлении. EditorFor control автоматически изменит разметку html.
The
Html.TextboxForвсегда создает текстовое поле (<input type="text" ...).в то время как EditorFor смотрит на тип и метаинформацию и может отображать другой элемент управления или шаблон, который вы предоставляете.
например, для свойств DateTime можно создать шаблон, который использует jQuery DatePicker.
Это одно из основных отличий, не упомянутых в предыдущих комментариях:
Readonlyсвойство будет работать с текстовым полем для и он не будет работать сEditorFor.@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })выше код работает, где, как и в следующем вы не можете сделать контроль над только для чтения.
@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
существует также небольшая разница в выводе html для строкового типа данных.
Html.EditorFor: <input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName"> Html.TextBoxFor: <input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">
Comments