2010-07-27 5 views
9

Attualmente sto scrivendo un piccolo sistema di template in ASP.NET per consentire agli utenti di aggiungere contenuti. Ad esempio, l'utente può inserire la stringa (il tipo di variabile è una stringa).Formattare stringhe in ASP.NET Razor

topHeader[x] = "They think it's all over. It is now!"; 

Tuttavia, un cambiamento che è necessario è la possibilità di aggiungere alcuni tag HTML di base all'interno di questi contenuti, in modo che il seguente può essere fatto

topHeader[x] = "They think it's all over. <strong>It is now!</strong>"; 

o

topHeader[x] = "They think it's all over. <a title="Football News" href="URL">It is now!</a>"; 

Se si aggiunge tali cose in stringhe ora non sono formattate come HTML, ma voglio in qualche modo sfuggire a loro in modo che possano essere. Ovviamente ho cercato su Internet la risposta, ma visto che Razor è abbastanza nuovo non c'è molto fuori là per aiutarmi.

Qualcuno ha un'idea di come farlo?

risposta

9

È necessario creare un'implementazione IHtmlString contenente la sorgente HTML.

Rasoio ha in programma di avere un metodo di supporto per farlo per te, ma, AFAIK, non lo è ancora, quindi credo che avrai bisogno di creare la tua classe che implementa l'interfaccia e restituisce il tuo HTML dal Metodo GetHtmlString().
MODIFICA: È possibile utilizzare la classe HtmlString.

è possibile modificare il dizionario topHeader di tenere IHtmlString s invece di String s, oppure è possibile lasciare il codice come è, ma avvolgerlo in un HtmlString nella vista Razor:

<tag>@new HtmlString(topHeader[x])</tag> 

Assicurati di sfugge correttamente qualsiasi carattere speciale non HTML.

4

SLaks ha ragione, ma non è necessario scrivere la propria implementazione di IHtmlString, ce n'è una integrata in denominata HtmlString. Quindi:

topHeader[x] = new HtmlString("They think it's all over. <a title=\"Football News\" href=\"URL\">It is now!</a>"); 

Dovrebbe fare il trucco.

+0

Ho provato questo, ma ricevono "CS0029: Impossibile convertire implicitamente il tipo 'System.Web.HtmlString' a 'stringa'" Qualche idea su quello che sto facendo sbagliato? –

+1

@EnderMB: modifica il dizionario per contenere 'IHtmlString' o' object'. – SLaks

9

Il metodo di supporto che hanno aggiunto si chiama Html.Raw() ed è molto più pulito.

Ecco un esempio:

@Html.Raw("Hello <a>World</a>!") 
+0

Questo ha funzionato come un fascino! Ed è più facile delle altre risposte fornite. – sksallaj