Вот пояснение из раздела замечаний BeginForm
ссылка (выделено мной):
Метод BeginForm
отображает форму, которая будет обрабатываться контроллеромМетод действия.
Вы можете использовать этот метод в блоке использования.В этом случае метод отображает закрывающий тег </form>
в конце используемого блока.
Если вы вызываете метод @Html.BeginForm()
без блока кода или using
блока, онрассматривается как стандартное выражение Razor (в кодировке HTML) и неявно вызывает метод ToString()
, поэтому вместо открывающего тега <form>
будет отображаться имя типа System.Web.Mvc.Html.MvcForm
.
Когда BeginForm
используется внутри блока using
, он выводит открывающий тег <form>
и закрывающий тег </form>
в выводе HTML, поэтому этот блок using
:
@using (Html.BeginForm())
{
<input type="submit" name="Submit" />
}
будет преобразован в вывод HTML следующим образом:
<form>
<input type="submit" name="Submit" />
</form>
Обратите внимание, что Html.BeginForm
возвращает IDisposable
объект, который автоматически вызывает Html.EndForm()
при удалении, следовательно, нет необходимости использовать Html.EndForm()
после using
блока.
Секунда, @Html.Label(...)
помощнику не требуется блок кода, поскольку он получен из пространства имен System.Web.Mvc.HtmlHelper
, которое возвращает MvcHtmlString
, которое одновременно отображает теги <label>
и </label>
.
В качестве примечания, если вы пытаетесь использовать @Html.EndForm()
внешний блок кода (обернутый @{ ... }
), это исключение будет вызвано, потому что Html.EndForm
- это метод void
, который Write(void)
превращается в ошибку времени компиляции:
Лучший перегруженный метод соответствует для System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult) 'содержит недопустимые аргументы.
Дополнительная ссылка:
Краткий справочник по синтаксису бритвы