Различия между Html.TextboxFor и Html.EditorFor в MVC и Razor
Почему по умолчанию эти изменения были изменены при добавлении нового "правого" представления? Каковы преимущества при использовании EditorFor()
vs. TextboxFor()
?
Я нашел это
По умолчанию в окнах Create and Edit теперь используется помощник Html.EditorFor вместо помощника Html.TextBoxFor. Это улучшает поддержку метаданных на модели в форме атрибуты аннотации данных, когда диалоговое окно "Добавить представление" генерирует представление.
Ответы
Ответ 1
Преимущества EditorFor
заключаются в том, что ваш код не привязан к <input type="text"
. Поэтому, если вы решите что-то изменить с точки зрения того, как ваши текстовые поля визуализируются, как обертывание их в div
, вы можете просто написать собственный шаблон редактора (~/Views/Shared/EditorTemplates/string.cshtml
), и все ваши текстовые поля в вашем приложении автоматически извлекут выгоду из этого изменения тогда как если у вас есть hardcoded Html.TextBoxFor
, вам придется изменять его повсюду. Вы также можете использовать Data Annotations, чтобы контролировать способ визуализации.
Ответ 2
TextBoxFor: он отобразит как элемент ввода текста HTML, соответствующий указанному выражению. В простом слове он всегда будет выглядеть как текстовое поле ввода независимо от типа данных свойства, которое получает привязку с элементом управления.
Редактор для: этот элемент управления немного умный. Он отображает разметку HTML на основе типа данных свойства. Например. предположим, что в модели есть булево свойство. Чтобы отобразить это свойство в представлении в качестве флажка, мы можем использовать CheckBoxFor или EditorFor. Оба будут генерировать одну и ту же разметку.
В чем преимущество использования редактора?
Как известно, в зависимости от типа данных свойства он генерирует html-разметку. Поэтому предположим, что завтра, если мы изменим тип данных в модели, не нужно ничего менять в представлении. EditorFor control автоматически изменяет разметку html.
Ответ 3
Html.TextboxFor
всегда создает текстовое поле (<input type="text" ...
).
В то время как EditorFor просматривает тип и метаинформацию и может отображать другой элемент управления или шаблон, который вы поставляете.
Например, для свойств DateTime вы можете создать шаблон, который использует jQuery DatePicker.
Ответ 4
Это одно из основных различий, не упомянутых в предыдущих комментариях:
Readonly
свойство будет работать с текстовым полем, и оно не будет работать с EditorFor
.
@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })
Над кодом работает, где с последующим вы не можете управлять readonly.
@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
Ответ 5
Существует также небольшая разница в выходе 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">