Estoy intentando escribir un asistente html de estilo BeginForm que usa IDisposable para ajustar otro código. Quiero que el ayudante solo represente el código ajustado si se cumple una determinada condición (por ejemplo, el usuario cumple una determinada función).Captura de contenido envuelto en ayudante html desechable del estilo BeginForm
Pensé que podría simplemente cambiar el contexto. Escriba en el método Begin y vuelva a cambiarlo en el método Dispose. El siguiente código compila y ejecuta, pero el contenido envuelto se procesa en todos los casos. Si lo paso, el contenido envuelto no se escribe en el nuevo StringWriter y, por lo tanto, no está bajo mi control.
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;
}
}
¿Es lo que estoy tratando de hacer posible con html helpers?
Sé que los ayudantes html declarativos en la maquinilla de afeitar probablemente funcionarían, pero preferirían el enfoque html helper estándar si fuera posible, dada la limitación de app_code de los maquinillas de afeitar en MVC3.
Usted debe comentar de salida el código "allowcontent", simplemente no hacer nada allí. De lo contrario, obtengo contenido anidado. Además, la copia de seguridad solo es necesaria cuando Allowed es 'falso' – Alex
Gracias @jitbit, actualicé mi publicación. Solo una idea de último momento, por cierto: esta clase Secured agrega muy poco valor sobre declaraciones if simples incorporadas ... Solo tomaría esta ruta si necesitas manipular el HTML, y he probado todas las otras opciones. He trabajado mucho con Razor desde que hice esta publicación y encuentro que la sintaxis de "usar" en Razor ve el abuso del lenguaje en lugar de la sintaxis del azúcar. – Moeri