如何使用HtmlHelper.BeginForm()工作?

时间:2010-06-25 20:00:28

标签: asp.net-mvc html-helper

好的,我想知道如何

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

产生

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

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

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

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:16)

BeginForm返回IDisposable,在EndForm中调用Dispose

编写using(Html.BeginForm()) { ... }时,编译器会生成一个finally块,调用Dispose,然后调用EndForm并关闭<form>标记。< / p>

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

答案 1 :(得分:1)

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

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

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