Sto cercando di scrivere un helper html in stile BeginForm che utilizza IDisposable per avvolgere altro codice. Voglio che l'helper esegua il rendering del codice spostato solo se viene soddisfatta una determinata condizione (ad esempio, l'utente si trova in un determinato ruolo).Catturare contenuto avvolto in helper html monouso in stile BeginForm
Ho pensato che avrei potuto semplicemente cambiare il contesto. Scrittura nel metodo Begin e reinserirlo nel metodo Dispose. Il codice seguente viene compilato ed eseguito ma il contenuto avvolto viene sottoposto a rendering in tutti i casi. Se lo passo, il contenuto avvolto non viene scritto nel nuovo StringWriter e quindi non è sotto il mio controllo.
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;
}
}
È ciò che sto cercando di fare con gli helper html?
So che gli helper dichiarativi html nel rasoio funzionerebbero probabilmente, ma preferirebbero un approccio helper standard html se possibile, data la limitazione app_code degli helper del rasoio in MVC3.
si dovrebbero commentare-out il codice "allowcontent", semplicemente non fare nulla lì. Altrimenti ricevo contenuto annidato. Inoltre, il backup è necessario solo quando Consentito è 'falso' – Alex
Grazie @jitbit, ho aggiornato il mio post. A proposito: questa classe Secured aggiunge molto poco valore alle semplici istruzioni if incorporate ... Prenderò questa rotta solo se hai bisogno di manipolare l'HTML e ho provato tutte le altre opzioni. Ho lavorato molto con Razor da quando ho creato questo post, e ho trovato la sintassi "using" in Razor per quanto riguarda l'abuso del linguaggio piuttosto che lo zucchero della sintassi. – Moeri