Html.BeginForm()类型的扩展名

时间:2009-10-30 09:05:07

标签: asp.net asp.net-mvc html-helper

有没有人知道创建一个行为类似的自定义HtmlHelperextension方法的语法。

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

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

<% } %>

我正在考虑......的一些事情。

有什么想法吗?

干杯,

ETFairfax

2 个答案:

答案 0 :(得分:8)

您需要创建一个实现IDisposable接口的类,并从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...
    }
}

答案 1 :(得分:1)

你需要一个像这样的方法:

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

    return new EndTableWriter();
}

EndTableWriter是这样的:

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