Это вполне возможно. То, как это делается в MVC с такими вещами, как Helper.BeginForm
, заключается в том, что функция должна возвращать объект, который реализует IDisposable
.
Интерфейс IDisposable
определяет один метод с именем Dispose
, который вызывается непосредственно перед сборкой мусора.
В C # ключевое слово using
полезно для ограничения области видимости объекта и для сбора мусора, как только он выходит из области видимости. Таким образом, использование его с IDisposable
естественно.
Вы захотите реализовать класс Section
, который реализует IDisposable
. Он должен будет визуализировать открытый тег для вашего раздела, когда он будет создан, и визуализировать закрывающий тег, когда он будет удален. Например:
public class MySection : IDisposable {
protected HtmlHelper _helper;
public MySection(HtmlHelper helper, string className, string title) {
_helper = helper;
_helper.ViewContext.Writer.Write(
"<div class=\"" + className + "\" title=\"" + title + "\">"
);
}
public void Dispose() {
_helper.ViewContext.Writer.Write("</div>");
}
}
Теперь, когда тип доступен, вы можете расширить HtmlHelper.
public static MySection BeginSection(this HtmlHelper self, string className, string title) {
return new MySection(self, className, title);
}