Подтвердить что ты не робот

Что такое использование Html.BeginForm в MVC3

Что такое использование Html.BeginForm в MVC3. Почему мы используем его, когда мы можем просто добавить тег формы напрямую, добавляет ли этот помощник html некоторую возможность или делает что-то, что нельзя сделать с помощью простого тега формы.

4b9b3361

Ответ 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.

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