2011-04-04 7 views
8

Mam prosty model:Jak używać brzytwy jak asp: dosłowne?

public class MyModel 
{ 
    public string Text{get;set;} 
} 

Mam widoku, który renderuje właściwość Text MyModel:

<p>@Model.Text</p> 

Jak renderować tagi html z tekstu, takich jak znaczniki? Na przykład mam Tekst "<b>Text</b>". Chcę dostać pogrubiony tekst wewnątrz znacznika p jako rezultat:

Tekst

Ale Razor renderuje tekst jak:

<b>Text</b> 

Odpowiedz

19

myślę, że trzeba go używać jak:

<p>@Html.Raw(Model.Text)</p> 

Możesz znaleźć więcej informacji here na blogu Phila Haacka.

anurse zwraca uwagę w komentarzach, że można, alternatywnie, ustawić typ członka swojej View Typ modelu Text jak IHtmlString i po prostu użyć @Model.Text do wyprowadzania go. ASP.NET MVC jest na tyle sprytny, aby zdać sobie sprawę, że dane wyjściowe nie powinny być usuwane.

+3

Jest to dobre rozwiązanie, jeśli chcesz czasami renderować zawartość bez kodowania HTML. Kiedy wiesz, że właściwością twojego modelu zawsze będzie treść HTML, która nie powinna być automatycznie kodowana, powinieneś utworzyć typ tej właściwości IHtmlString. Więc jeśli zmienisz tekst na IHtmlString zamiast łańcucha, możesz wpisać @ Model.Text, a Razor wypisze tagi poprawnie. W ten sposób jest oczywiste, że niektóre treści są w formacie HTML i powinny zostać starannie odkażone, aby uniknąć ataków wtrysku HTML. –

+0

@anurse: Wow, świetny komentarz. Nie wiedziałem o tym sam. Zaktualizuję odpowiedź, aby dodać te informacje. – paracycle