Что такое использование Html.BeginForm в MVC3. Почему мы используем его, когда мы можем просто добавить тег формы напрямую, добавляет ли этот помощник html некоторую возможность или делает что-то, что нельзя сделать с помощью простого тега формы.
Что такое использование Html.BeginForm в MVC3
Ответ 1
Вспомогательный метод Html.BeginForm
содержит перегрузку пары , целью которой является упрощение написания маршрутизируемых форм. Он осведомлен о структуре MVC и уверен, что он нацелен на контроллер и действие. Это всего лишь немного синтаксического сахара:
<form method="post" action="@Url.Action(...)">
В словах Microsoft:
Структура ASP.NET MVC включает вспомогательные методы, которые обеспечивают простой способ визуализации HTML в представлении.
Конечно, никто не заставляет вас использовать их. Это просто вопрос предпочтения. Фактически, в первые дни MVC многие разработчики WebForms отметили свою новую свободу от серверных элементов управления a-la <asp:TextBox>
и др., И настаивали на том, чтобы писать все вручную.
Использование хелперов для полей формы настоятельно рекомендуется, так как они знают о таких вещах, как проверка формы. Html.BeginForm
просто дает вам последовательный способ начать и закончить вашу форму:
@using(Html.BeginForm())
{
@Html.LabelFor(...)
@Html.EditorFor(...)
}
Html.BeginForm
возвращает объект IDisposable
, позволяющий обернуть его в оператор С# using
. Когда using
выйдет, утилизация вызовет Html.EndForm()
автоматически для вас. Поскольку Html.EndForm
возвращает void
, немного неудобно звонить из Razor:
@Html.BeginForm()
<formStuff>
@{Html.EndForm();}
Простой @Html.EndForm()
включится в Write(Html.EndForm()) -> Write(void)
, т.е. ошибка времени компиляции.
Ответ 2
Конечно, вы можете закодировать его вручную, но у него есть несколько преимуществ, таких как:
- он возвращает объект, который является одноразовым, поэтому вы можете поместить его в предложение
using
, и он закроет тэг формы для вас - он вычисляет URL-адрес действия формы
Ответ 3
делает то, что нельзя сделать с помощью простой формы
В конце каждого вызова метода помощника преобразуется в чистый HTML, поэтому ничего не может сделать Html.BeginForm, который не может быть выполнен с помощью тега <form>
напрямую.
Html.BeginForm
является чисто вспомогательным методом.
Ответ 4
Какая цель иметь помощников вообще? (Риторический вопрос) Вы также можете вводить все входы вручную, но помощники... ну, иногда помогите.
все, что он делает, помещает тег. Да, вы можете сделать это вручную, или вы можете быть немного более причудливыми и сделать это:
@using(Html.BeginForm())
{
}
Это также закроет тег формы. Поэтому, если вы сохраняете все свои входы внутри соблазнительных скобок, вам не нужно беспокоиться о том, чтобы закрыть закрытие тега формы.
Ответ 5
Отличный вопрос, я задавался этим вопросом совсем немного.
Я мог ошибаться, но здесь моя догадка (лучший человек может меня исправить):
В первые дни MVC бритвы не было.
Переключение между С#/VB и html было жестким по синтаксису, поэтому был направлен на минимизацию этих границ.
При создании форм было полезно создать всю форму на стороне С#/VB без какого-либо смешивания ручного html, чтобы иметь только одну границу с окружающим миром html.
И поскольку программисты часто копируют стиль выполнения вещей из другого места, практика использования этих помощников сохраняется, хотя их преимущество исчезло с появлением бритвы.