2011-09-02 6 views
24

OK, abbastanza nuovo per ASP.Net MVC, quindi mi dispiace se questa è una domanda stupida, ma come faccio a mostrare i valori di un ViewBag come HTML. Per esempio, se ViewBag.SomeMessage contiene il seguente testo:Come posso mostrare un viewbag come html?

<h3>Test</h3><p>Test</p><p>Test</p><p>Test</p><p>Test</p><p>TEST</p>

Come potrei fare per avere effettivamente il rendering della pagina che come normale HTML? O c'è un modo molto più semplice per ottenere ciò che mi manca del tutto?

Cheers!

risposta

47

Ognuno è corretto nell'uso di @Html.Raw() ma desidero sottolineare di prestare attenzione a questo, in quanto può rendere il vostro sito vulnerabile alle vulnerabilità XSS.

Vorrei combinare lo @Html.Raw(ViewBag.SomeMessage) con Microsoft's Anti-XSS Library per assicurarmi di non introdurre alcuna vulnerabilità da questo.

Edit: Il vantaggio della biblioteca Anti-XSS (se non hai guardato) è che ha una whitelist di markup approvati (come <b>, <h3>, ecc ..) in modo che solo approvato i markup saranno non codificati.

Edit2: Here's an example di come è stato fatto.

+0

+1 Questo è anche un buon consiglio. – Tejs

+0

autopromozione spudorata su cosa sia xss e usando anti-xss, oltre ad altre cose di hacking: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV333 –

12

Si potrebbe utilizzare il metodo Raw:

@Html.Raw(ViewBag.SomeMessage) 
+0

Accidenti a te! hahaha – slandau

+2

restituendo il favore :) haha ​​ – slandau

7

Penso che si possa fare qualcosa di simile:

@Html.Raw(ViewBag.SomeMessage) 
+0

+1 - NEMESIS! = D Sono solo un veloce sorteggio McGraw oggi suppongo = D – Tejs

6
@Html.Raw(ViewBag.SomeHtmlProperty) 

Detto questo, ecco il mio disclaimer: NON USARE ViewBag . Utilizza visualizzazioni e modelli di visualizzazione fortemente tipizzati. ViewBag/ViewData è come un cancro per un'applicazione ASP.NET MVC.

1

inserire i dati in ViewBag come una stringa con codifica HTML che non deve essere nuovamente codificata.

ViewBag.myBag = MvcHtmlString.Create(myCode ?? string.Empty); 

quindi utilizzare

@ViewBag.myBag 

Il documentation per MvcHtmlString.