Відмінності між Html.TextboxFor та Html.EditorFor у MVC та Razor


170

Чому вони за замовчуванням були змінені під час додавання нового перегляду "редагування"? Які переваги при використанні EditorFor()VS. TextboxFor()?

Я це знайшов

За замовчуванням скелі створення та редагування тепер використовують помічник Html.EditorFor замість помічника Html.TextBoxFor. Це покращує підтримку метаданих на моделі у вигляді атрибутів анотації даних, коли діалогове вікно Додати перегляд генерує подання.


5
хтось має приклад, як це робиться? наприклад, писати редактор для DatePicker?
ShaneKm

Відповіді:


166

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


Є помилка, ймовірно, у старій версії. EditorFor не розпізнає "подвійний". Для 'long' він вважає це "int", а step = "0.01" не працює в атрибутах, тому я використав TextBoxFor і додав @ type = 'number' @ step = "0.01", щоб він працював
Чарлі

129

TextBoxFor : Він буде відображати як html-елемент введення тексту, відповідний заданому виразу. Простим словом, він завжди буде відображатись як текстове поле введення, незалежно від типу даних властивості, яке зв'язується з керуванням.

EditorFor : Цей контроль трохи розумний. Він надає розмітку HTML на основі типу даних властивості. Наприклад, в моделі є булева властивість. Щоб відобразити цю властивість у поданні як прапорець, ми можемо використовувати CheckBoxFor або EditorFor. Обидва будуть генерувати однакову розмітку.

Яка перевага використання EditorFor?

Як ми знаємо, залежно від типу даних властивості воно генерує розмітку html. Тож припустимо, що завтра, якщо ми змінимо тип даних властивості в моделі, не потрібно нічого змінювати в представленні. EditorFor управління автоматично змінить розмітку html.


15
чудова, проста відповідь, яку легко засвоїть навіть початківець.
Королі

вище опис допоможе за цим посиланням forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel
Amol Shiledar

Чи є коли-небудь випадок, коли ви повинні абсолютно використовувати TextBoxFor?
eaglei22

55

Html.TextboxForЗавжди створює текстове поле ( <input type="text" ...).

У той час як EditorFor розглядає тип та мета-інформацію та може надати інший елемент керування чи шаблон, який ви надаєте.

Наприклад, для властивостей DateTime ви можете створити шаблон, який використовує jQuery DatePicker.


12
Будь-який приклад того, як реалізувати jquery datepicker за допомогою editfor?
Перу

2
дякуємо, що спростили різницю за допомогою випадку "дата-час".
Королі

1
@Peru, тут або тут , як це зробити, implement jquery datepickerі як користуватися ним, EditorForє тут
shaijut

8

Це одна з основних відмінностей, не зазначених у попередніх коментарях:
Readonlyвластивість буде працювати з текстовим полем і не працюватиме з ним EditorFor.

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

Наведений вище код працює, коли, як і в наступному, ви не можете контролювати лише читання .

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

16
Ви можете зробити редактор для читання лише за допомогою наступного синтаксису: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}})
Дуг Кнудсен

4

Існує також невелика різниця у виведенні 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">

2
це абсолютно неправильна відповідь, тому що ключова різниця полягає в тому, що Texbox повертає введення, а editorfor повертає ваш шаблон, де введення - це шаблон за замовчуванням для editorfor.
Артем Г
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.