Различия между Html.TextboxFor и Html.EditorFor в MVC и Razor - PullRequest
161 голосов
/ 28 января 2011

Почему по умолчанию они были изменены при добавлении нового представления "редактировать"?Каковы преимущества при использовании EditorFor() против TextboxFor()?

Я нашел это

По умолчанию скаффолды Create и Edit теперь используют помощник Html.EditorFor вместоHtml.TextBox для помощника.Это улучшает поддержку метаданных в модели в форме атрибутов аннотаций данных, когда диалоговое окно Добавить представление создает представление.

Ответы [ 5 ]

156 голосов
/ 28 января 2011

Преимущества EditorFor в том, что ваш код не привязан к <input type="text".Поэтому, если вы решите что-то изменить в соответствии с тем, как ваши текстовые поля отображаются как div, вы можете просто написать собственный шаблон редактора (~/Views/Shared/EditorTemplates/string.cshtml), и все ваши текстовые поля в вашем приложении автоматически получат выгоду от этого изменения.тогда как если вы жестко закодировали Html.TextBoxFor, вам придется изменять его везде.Вы также можете использовать аннотации данных для управления способом визуализации.

117 голосов
/ 17 мая 2013

TextBoxFor : будет отображаться как HTML-элемент ввода текста, соответствующий указанному выражению. Проще говоря, он всегда будет отображаться как текстовое поле ввода независимо от типа данных свойства, которое связывается с элементом управления.

EditorFor : Этот элемент управления немного умен. Он отображает HTML-разметку на основе типа данных свойства. Например. Предположим, что в модели есть логическое свойство. Чтобы отобразить это свойство в виде флажка, мы можем использовать CheckBoxFor или EditorFor. Оба будут генерировать одну и ту же разметку.

В чем преимущество использования EditorFor?

Как мы знаем, в зависимости от типа данных свойства генерируется HTML-разметка. Поэтому предположим, что завтра, если мы изменим тип данных свойства в модели, не нужно ничего менять в представлении. Элемент управления EditorFor автоматически изменит HTML-разметку.

54 голосов
/ 28 января 2011

Html.TextboxFor всегда создает текстовое поле (<input type="text" ...).

Пока EditorFor просматривает тип и метаинформацию и может отображать другой элемент управления или шаблон, который вы предоставляете.* Например, для свойств DateTime вы можете создать шаблон, который использует jQuery DatePicker.

7 голосов
/ 23 декабря 2015

Это одно из основных отличий, не упомянутых в предыдущих комментариях:
Readonly свойство будет работать с текстовым полем для и не будет работать с EditorFor.

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })

Вышеупомянутый код работает, где, как и в случае со следующим, вы не можете управлять readonly .

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
4 голосов
/ 12 апреля 2014

Существует небольшая разница в выводе 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">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...