Я пытаюсь написать html-помощник в стиле BeginForm, который использует IDisposable для переноса другого кода. helper для рендеринга обернутого кода только в том случае, если выполняется определенное условие (например, пользователь находится в определенной роли).
Я подумал, что могу просто переключить context.Writer в методе Begin и переключить его обратно в методе Dispose. Приведенный ниже код компилируется и запускается, но обернутое содержимое отображается во всех случаях.Если я прохожу через него, обернутое содержимое не записывается в новый StringWriter и, следовательно, не находится под моим контролем.
public static IDisposable BeginSecure(this HtmlHelper html, ...)
{
return new SecureSection(html.ViewContext, ...);
}
private class SecureSection : IDisposable
{
private readonly ViewContext _context;
private readonly TextWriter _writer;
public SecureSection(ViewContext context, ...)
{
_context = context;
_writer = context.Writer;
context.Writer = new StringWriter();
}
public void Dispose()
{
if (condition here)
{
_writer.Write(_context.Writer);
}
_context.Writer = _writer;
}
}
Возможно ли то, что я пытаюсь сделать? с хелперами html?
Я знаю, что декларативные хелперы html в razor, вероятно, будут работать, но я бы предпочел стандартный подход хелперов html, если это возможно, учитывая ограничение app_code хелперов razor в MVC3.