Тип расширения Html.BeginForm () - PullRequest
6 голосов
/ 30 октября 2009

Кто-нибудь знает синтаксис для создания собственного метода HtmlHelperextension, который ведет себя как ..

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

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

<% } %>

Я думаю о чем-то вроде ...

Есть идеи?

Приветствия

ETFairfax

Ответы [ 2 ]

8 голосов
/ 30 октября 2009

Вам нужно создать класс, который реализует интерфейс 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 голос
/ 30 октября 2009

Вам понадобится метод, похожий на этот:

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
    }
}
...