Capture contenido envuelto en el ayudante de HTML desechable estilo BeginForm

Estoy tratando de escribir un ayudante HTML de estilo BeginForm que use IDisposable para envolver otro código. Quiero que el ayudante solo genere el código envuelto si se cumple una determinada condición (por ejemplo, el usuario está en un determinado rol).

Pensé que simplemente podía cambiar el contexto. Escriba en el método de Inicio y vuelva a cambiarlo en el método de Disposición. El siguiente código se compila y ejecuta, pero el contenido envuelto se representa en todos los casos. Si paso a través de él, el contenido envuelto no se escribe en el nuevo StringWriter y, por lo tanto, no está bajo mi control.

<code>    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;
        }
    }
</code>

¿Es lo que estoy tratando de hacer posible con html helpers?

Sé que los ayudantes html declarativos en la maquinilla de afeitar probablemente funcionarán, pero preferiría el enfoque del ayudante html estándar si fuera posible, dada la limitación app_code de los ayudantes de la maquinilla en MVC3.

Respuestas a la pregunta(2)

Su respuesta a la pregunta