Различия между 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">