2011-01-11 10 views
8

Stiamo utilizzando Razor al di fuori del flusso MVC tipico. Le nostre viste Razor sono chiamate all'interno di una trasformazione XSL tramite un'estensione C#. L'output della vista Razor viene restituito alla trasformazione xsl come stringa. In alcuni casi, acquisiamo il risultato di una vista Razor in una variabile xsl e quindi lo passiamo al nostro Modello per essere consumati come dati in un'altra vista Razor. Quando ciò accade, finiamo con la prima vista doppia codificata, una volta da Razor, la seconda volta tramite la trasformazione xsl. Dobbiamo essere in grado di eseguire Razor senza che sia codificato l'output.Come disattivare la codifica HTML per un'intera visualizzazione Razor

È possibile? Come lo faremo?

+2

Non è la risposta completa, ma è possibile utilizzare @ (nuova HtmlString (Model.Something)) o @ Html.Raw (Model.Something) per ignorare la codifica. – jhexp

+0

Grazie. Sono a mio agio con l'utilizzo delle funzionalità di codifica disponibili all'interno della vista. In questo caso sto restituendo l'output del motore di visualizzazione a un altro processo e ho bisogno di impedire la codifica eseguita dal motore sull'intera vista. Non è solo questione di incorporare alcuni dati codificati nella vista. Capisco che questa non è un'implementazione standard. Nel nostro caso, abbiamo un sistema legacy con molti vincoli di compatibilità con le versioni precedenti che stiamo cercando di modernizzare. In caso di successo, l'uso di Razor ci consentirà di migrare a MVC in un anno o due. Grazie per l'input però. – gidmanma

risposta

14

Dal momento che si desidera disabilitare la codifica in tutta la tua vista, la soluzione migliore sarebbe quella di creare la propria classe di visualizzazione di base che eredita da WebPageBase (e quindi le vostre opinioni dovrebbe usare @inherits per specificare il nuovo tipo) e l'override del metodo Write(object value) così che chiama invece WriteLiteral(). In questo modo l'output non sarà codificato.

+0

Grazie Marcind - Speravo che tu mi suonassi. Ci provo. – gidmanma

5

Inoltre la la answer above si sarebbe raggiungere questo obiettivo in questo modo:

public abstract class TextBasedViewPage : System.Web.Mvc.WebViewPage 
{ 
    public override void Write(object value) 
    { 
     WriteLiteral(value); 
    } 
} 

public abstract class TextBasedViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> 
{ 
    public override void Write(object value) 
    { 
     WriteLiteral(value); 
    } 
} 

Poi a suo avviso si può iniziare con:

@inherits MyNamespace.TextBasedViewPage<MyModelNamespace.Model> 
Problemi correlati