Использование HTML.EditorFor против использования HTML.CheckBox

У меня есть следующий класс модели, который содержит логическое значение: -

Public class Server
{
        public bool IsIPUnique { get; set; }
}

В настоящее время я использую следующее, чтобы отобразить флажок в моем представлении Razor: -

<input type="CheckBox" name="IsIPUnique" value="true" @(Html.Raw(Model.IsIPUnique ? "checked=\"checked\"" : ""))/> IP Unique.

но я читал о шаблоне EditorFor, и он может автоматически создавать флажок и устанавливать/снимать его на основе значений модели, поэтому я попробовал следующее: -

@Html.EditorFor(model=>model.IsIPUnique)<span>test</span>

поэтому мой вопрос: могу ли я заменить свой старый код новым, который использует EditorFor?, или asp.net mvc может обрабатывать эти значения по-другому? Спасибо


person john Gu    schedule 30.06.2014    source источник
comment
Так что же произошло, когда вы попробовали новый код?   -  person Mike Cheel    schedule 30.06.2014
comment
в основном он генерирует ту же разметку HTML, но я не уверен в использовании EditorFor вместо флажка?   -  person john Gu    schedule 30.06.2014
comment
Рассматривали ли вы использование Html.CheckBoxFor?   -  person Mike Cheel    schedule 30.06.2014
comment
EditorFor великолепен, когда вам все равно, какие входные данные mvc генерирует для вашей модели (имеется в виду отсутствие шаблона редактора) ИЛИ когда вам нужен конкретный контроль над тем, как создается ваша модель (или часть вашей модели). Однако по большей части вы найдете вспомогательные методы html, такие как CheckBoxFor, которые помогут вам.   -  person Mike Cheel    schedule 30.06.2014
comment
Кроме того, при использовании ваших форм главное помнить, что вы должны установить свойство имени для правильной привязки и проверки модели и тому подобного. MVC позаботится об этом за вас, когда вы используете вспомогательные методы html.   -  person Mike Cheel    schedule 30.06.2014
comment
@MikeCheel, значит, лучше использовать CheckBoxFor вместо EditorFor?   -  person john Gu    schedule 30.06.2014
comment
Я хочу сказать, что если все, что вам нужно, это сгенерировать флажок, то CheckBoxFor, вероятно, вам подойдет. Если вам по какой-то причине нужно, чтобы флажок отображался каким-то другим способом, у вас тоже есть такая возможность, но похоже, что CheckBoxFor сработает для вас. Если вам нужно добавить атрибуты addl html, существует перегрузка, позволяющая это сделать. Пример, когда вы, возможно, не захотите использовать CheckBoxFor, скажем, вы использовали настраиваемый элемент управления из какой-то сторонней библиотеки, которая имеет какой-то особый синтаксис или что-то еще (надуманный, я знаю). Большинство сторонних библиотек в наши дни обертывают входные данные формы.   -  person Mike Cheel    schedule 30.06.2014


Ответы (1)


В основном у вас есть 3 возможности:

Напишите HTML вручную (как вы уже делали)

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

Используйте специальные помощники HTML (Html.CheckBoxFor)

Специальные помощники HTML добавляют уровень абстракции ко всем элементам управления. Легко изменить шаблон всех элементов управления, использующих один и тот же помощник HTML, и это делает ваши представления более читабельными.

Используйте общий редактор

HTML-помощник EditorFor отлично подходит, если типы данных вашей модели часто меняются. EditorFor автоматически настроит поля ввода на новый тип данных и не выдаст ошибку (как в случае с конкретными помощниками HTML). Также немного сложнее добавлять атрибуты HTML в EditorFor, в то время как определенные помощники HTML часто имеют для них перегруженные версии. Однако это исправлено в MVC 5.1: part-3-bootstrap-and-javascript-enhancements" rel="noreferrer">http://weblogs.asp.net/jongalloway/look-at-asp-net-mvc-5-1-and-web-api- 2-1-часть-3-улучшения начальной загрузки и JavaScript

Вывод: в вашем случае я бы использовал помощник HTML CheckBoxFor, потому что тип данных вряд ли изменится, и это сделает представление чище

person Bruno V    schedule 01.07.2014