Html.BeginForm() type of extension

坚强是说给别人听的谎言 提交于 2019-12-09 06:11:15

问题


Does anyone know the syntax for creating a custom HtmlHelperextension method which behaves like..

<% using (Html.BeginForm()) {%>

<p>Loads of html stuff here </p>

<% } %>

I'm thinking of something along the lines of....

Any ideas?

Cheers,

ETFairfax


回答1:


You need to create a class that implements IDisposable interface and return that from your HtmlHelper.

public static class HtmlHelperTableExtensions {
    private class TableRenderer : IDisposable {
        HtmlHelper html;
        public TableRenderer(HtmlHelper html) {
           this.html = html;
        }
        public void Dispose() {
           HtmlHelperTableExtensions.EndTable(html);
        }
    }
    public static IDisposable BeginTable(this HtmlHelper html) {
        // print begin table here...
        return new TableRenderer(html);
    }
    public static void EndTable(this HtmlHelper html) {
        // print end table here...
    }
}



回答2:


You'd need to have a method something like this:

public static IDisposable BeginTable(this HtmlHelper html, ...)
{
    // write the start of the table here

    return new EndTableWriter();
}

Where the EndTableWriter is something like this:

private class EndTableWriter : IDisposable
{
    public void Dispose()
    {
        // write the end of the table here
    }
}


来源:https://stackoverflow.com/questions/1648711/html-beginform-type-of-extension

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