Почему Html.BeginForm нужно заключать в фигурные скобки? - PullRequest
0 голосов
/ 17 мая 2018

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

@{Html.BeginForm();}
    // some other stuff....
    <input type="submit" name="Submit" />
@{ Html.EndForm();}

Vs.если я просто хочу ярлык, я могу просто сделать:

@Html.Label("Hi")

Когда я попробовал @Html.BeginForm() без фигурных скобок, я просто получаю

System.Web.Mvc.Html.MvcForm

напечатано на экране.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Состав бритвы @using - в C # используется оператор using для обеспечения удаления объекта.В Razor тот же механизм используется для создания помощников HTML, которые содержат дополнительное содержимое.

Вот хорошая ссылка на синтаксис Razor , которая более детально описывается, включая синтаксис для@using (Html.BeginForm())

0 голосов
/ 18 мая 2018

Вот пояснение из раздела замечаний 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) 'содержит недопустимые аргументы.

Дополнительная ссылка:

Краткий справочник по синтаксису бритвы

0 голосов
/ 17 мая 2018

Ваш экран печати не был загружен, но вы получаете эту ошибку, потому что вам нужно завершить точкой с запятой, как это @Html.BeginForm ();

О скобках, этообразец кода.@ Html.BeginForm Записывает открывающий тег в ответ, а @ Html.Label возвращает элемент метки HTML и не требует открывать и закрывать фигурные скобки.

Вам не нужно использовать Begin и End.

Вы можете использовать вот так:

@using (Html.BeginForm())
  {
     // some other stuff....
     <input type="submit" name="Submit" />
  }

Таким образом, закрывающие скобки будут выполнять задание EndForm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...