2010-06-25 44 views
8

行,所以我想知道如何使用HtmlHelper.BeginForm()工作?

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

如何产生

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

即它是如何在末尾添加</form>?我查看了codeplex,并没有在htmlhelper中找到它。有一个EndForm方法,但上面知道如何调用它?

原因是我想创建一个htmlhelper扩展名,但不知道如何在使用结束时关闭。

任何帮助,将不胜感激:)

回答

16

BeginForm返回IDisposable它调用了DisposeEndForm

当你写using(Html.BeginForm()) { ... },编译器生成一个finally块调用Dispose,进而调用EndForm并关闭<form>标签。

您可以通过编写自己的类实现IDisposable来复制此效果。

+0

惊人的快,应该有这个想法!我不能将这个标记为已回答8分钟:) – Jose 2010-06-25 20:07:14

+2

+1,但出于对学习的兴趣,'EndForm()'在技术上调用Dispose()(写出''),而不是相反的;) – 2010-06-25 20:12:05

1

就像SLaks说的那样,它会生成一个finally块,它调用EndForm,它在对象.BeginForm()返回的IDisposable接口上调用Dispose方法。

BeginForm使用Rseponse.Write将HTML写入响应。

EndForm将结束标记写出到Response中。因此,从BeginForm返回的构造函数和Dispose方法之间发生的任何事情都将正确地写入到表单标记之间的响应中。