Можно ли использовать HtmlHelper в MVC?

Есть ли конкретная причина, по которой я должен использовать методы Html.CheckBox, Html.TextBox и т.д. вместо того, чтобы просто вручную писать HTML?

<%= Html.TextBox("uri") %>

отображает следующий HTML

<input type="text" value="" name="uri" id="uri"/>

Предположим, это экономит вам несколько ключевых штрихов, но кроме этого. Есть ли какая-то конкретная причина, по которой я должен идти по пути использования HtmlHelpers, когда это возможно, или это просто предпочтение?

Ответ 1

Есть огромные преимущества:

Он перегружает методы, чтобы предварительно заполнить значения (отформатированные и безопасные для HTML), как и ViewState.

Он позволяет встроить поддержку функций проверки MVC.

Он позволяет переопределить рендеринг, предоставив собственную DLL для изменения рендеринга (своего рода методология типа "Контроллер-адаптер" ).

Это приводит к идее создания собственных "элементов управления": http://www.singingeels.com/Articles/Building_Custom_ASPNET_MVC_Controls.aspx

Ответ 2

Еще одно преимущество заключается в том, что если ваша ViewData содержит значение, соответствующее имени поля, оно будет заполнено.

например.

ViewData["FirstName"] = "Joe Bloggs"; 

<%=Html.TextBox("FirstName") %>

отобразит

<input type="text" value="Joe Bloggs" id="FirstName" />

Ответ 3

Одна вещь для согласованности... Я всегда забываю атрибут имени. Кроме того, вы можете расширить функции для своих собственных проектов. Они не называются помощниками для ничего!

Ответ 4

Потенциал использования слоя абстракции - это будущая проверка кода в подключаемом режиме. Возможно, сегодня вы создаете страницы HTML 4, но завтра вы хотите создавать страницы XHTML или XAML или XUL. Это много изменений, если вы просто скопируете теги везде, особенно если у вас есть сотни страниц. Если все вызывает эту библиотеку, все, что вам нужно сделать, это переписать библиотеку. Недостатком является то, что люди обычно считаются менее читаемыми. Таким образом, это, скорее всего, увеличивает когнитивный спрос на ваших поддерживающих программистов. Эти преимущества и недостатки действительно не имеют никакого отношения к MVC.

Ответ 5

Он фактически автоматически заполняет ваше текстовое поле, основываясь сначала на ViewData.Model.uri, а затем на ViewData [ "uri" ]. Сделав это вручную, вам нужно сделать <input value="<%Html.Encode(ViewData.Model.Uri"%>" />

Ответ 6

Я слишком долго не делал MVC, но я уже написал некоторые методы расширения для создания вкладок меню на основе Html.ActionLink. Это позволяет мне быть совместимым с моим использованием, и, если я решит изменить способ работы моего меню CSS, измените только один метод для вывода нового формата вкладки.

Другое использование, которое я сделал из них, находится в условном выводе, используя ViewData для отправки значений элементам управления.