Как работает HtmlHelper.BeginForm ()? - PullRequest
8 голосов
/ 26 июня 2010

Хорошо, поэтому я хочу знать, как

<% using (Html.BeginForm()) { %>
  <input type="text" name="id"/>
<% } %>

продукты

<form>
  <input type="text" name="id"/>
</form>

а именно как он добавляет </form> в конце? Я посмотрел в codeplex и не нашел его в htmlhelper. Существует метод EndForm, но как вышесказанное узнает, как его вызвать?

Причина в том, что я хочу создать расширение htmlhelper, но не знаю, как закрыть его в конце использования.

Любая помощь будет оценена :)

Ответы [ 2 ]

16 голосов
/ 26 июня 2010

BeginForm возвращает IDisposable, который вызывает EndForm в Dispose.

Когда вы пишете using(Html.BeginForm()) { ... }, компилятор генерирует блок finally, который вызывает Dispose, который, в свою очередь, вызывает EndForm и закрывает тег <form>.

Вы можете продублировать этот эффект, написав свой собственный класс, который реализует IDisposable.

1 голос
/ 26 июня 2010

Как и сказал SLaks, он генерирует блок finally, который вызывает EndForm, который вызывает метод Dispose для интерфейса IDisposable, который возвращает объект .BeginForm ().

BeginForm использует Rseponse.Write для записиHTML-код ответа.

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

...