2017-01-20 5 views
2

Может кто-нибудь объяснить мне, почему мы должны использоватьПочему мы должны использовать @using с Html.BeginForm

@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post)) 

Вместо:

@Html.BeginForm("CheckUser", "Home", FormMethod.Post) 

Какова главная цель @using в здесь, насколько я знаю, я использую ключевое слово «using», чтобы убедиться, что объект удален, как только он выходит из области видимости. я немного смущен.

Я задаю этот вопрос, потому что @ Html.BeginForm выводит текст: «System.Web.Mvc.Html.MvcForm {« перед отображением содержимого формы. И, используя ключевое слово 'using', этот текст не отображается.

Edit: Это мой код, который делает "System.Web.Mvc.Html.MvcForm ..."

@Html.BeginForm("CheckUser", "Home", FormMethod.Post) 
    <label for="username">Username :</label> 
    <input type="text" name="username" id="username" placeholder="username"/> 

    <label for="password">Password :</label> 
    <input type="password" name="password" id="password" placeholder="password"/> 

    <input type="submit" value="Submit" /> 
@{Html.EndForm();} 
+3

, который должен сгенерировать соответствующий закрывающий тег (в этом случае тег закрытия

) – Thangadurai

+0

Я еще не убежден, почему нам нужно использовать ключевое слово using? –

+2

Выход закрывающего тега реализуется методом dispose. Не используя «использование», у вас не будет закрывающего тега «». – mstaessen

ответ

2

@using (Html.BeginForm("CheckUser", "Home", FormMethod.Post)) с помощью

Он автоматически добавляет </form> на вашей странице. вам не нужно заботиться о закрытии тега формы, и это предотвращает случайную проблему, если кто-то забывает закрыть форму.

@*<form>*@ 
    @using (Html.BeginForm("CheckUser", "Home", FormMethod.Post)) 
    { 

    }@* </form> gets added automaticaly*@ 

Если вы хотите использовать Html.EndForm(), используйте его как следующий

@{Html.BeginForm("CheckUser", "Home", FormMethod.Post);} 
//other form elements 
@{Html.EndForm();} 

Причина: Html.EndForm() не возвращает ничего (тип возвращаемого void), это написать на поток в земельном участке , Если вы не используете {}, @ символ будет ожидать что-то, чтобы вернуться из следующего утверждения, следовательно, он будет использовать object.ToString(), что приводит к System.Web.Mvc.Html.MvcForm

+0

Я использовал @ Html.EndForm, но он по-прежнему отображает " System.Web.Mvc.Html.MvcForm "перед рендерингом содержимого формы. –

+0

используйте это как @ {Html.EndForm();} –

+0

Да, я использовал эту форму на самом деле @ {Html.EndForm();}, @ Html.EndForm не работал для меня :). Но он по-прежнему отображает " System.Web.Mvc.Html.MvcForm " –

3

BeginForm имеет довольно интересную (MIS) использование IDisposible рисунка!

Начиная с начала, BeginForm возвращает экземпляр . MvcForm реализует IDisposible и его метод Dispose ...

[...] оказывает закрывающий тег в конце Использование заявления.

(источник: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.mvcform.dispose(v=vs.118).aspx#M:System.Web.Mvc.Html.MvcForm.Dispose)

Без такого рода реализации вы должны были бы сделать что-то вдоль линий

@{ Html.BeginForm("CheckUser", "Home", FormMethod.Post); } 
<!-- form content here --> 
@{ Html.EndForm(); } 

Что, я думаю, они сделали это решение будет неуклюже и легко забыть.

+0

Спасибо за @ {Html.EndForm();}, это первый раз, когда я слышу об этом, но он по-прежнему отображает «System.Web.Mvc.Html.MvcForm {...» –

+1

@Souregi, Both 'BeginForm()' и 'EndForm()' должны быть завернуты в '@ {...}', потому что они возвращают 'void' (Jamiec, я взял на себя смелость редактируя свой ответ, чтобы показать правильный синтаксис - и 'EndForm()' существует :) –

+0

Спасибо @StephenMuecke – Jamiec

2

Это уловка, чтобы заставить визуализацию близких теги формы.

Уловка основана на интерфейсе IDisposable, который using понимает и использует для вызова метода Dispose после того, как блок закончился.

Dispose осуществление типа, возвращенного с BeginForm, фактически ничего не распоряжается. Он просто записывает закрывающий тег в выходной поток.

+0

Я согласен - это просто синтаксический сахар, зная, какова область вашей формы, чтобы закрыть ее. – PhillipH