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方法之間發生的任何事情都將正確地寫入到表單標記之間的響應中。