how does using HtmlHelper.BeginForm() work?

放肆的年华 提交于 2019-12-19 06:28:12

问题


Ok so I want to know how

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

produce

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

namely how does it add the </form> at the end? I looked in codeplex and didn't find it in the htmlhelper. There is a EndForm method, but how does the above know to call it?

The reason is I want to create an htmlhelper extension, but don't know how to close out on the end of a using.

Any help would be appreciated :)


回答1:


BeginForm returns an IDisposable which calls EndForm in Dispose.

When you write using(Html.BeginForm()) { ... }, the compiler generates a finally block that calls Dispose, which in turn calls EndForm and closes the <form> tag.

You can duplicate this effect by writing your own class that implements IDisposable.




回答2:


Much like SLaks said, it generates a finally block that calls the EndForm which calls the Dispose method on the IDisposable interface that the object .BeginForm() returns.

BeginForm uses Rseponse.Write to write out the HTML to the response.

EndForm writes out the closing tag to the Response. Thusly anything that happens in between the constructor returned from BeginForm and the Dispose method will be written to the response properly between the form tags.



来源:https://stackoverflow.com/questions/3121065/how-does-using-htmlhelper-beginform-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!