2011-02-11 20 views
21

Bir pasaj ve/veya HTML pasajı döndüren bir işlev var. En beklediğiniz gibi görünümünde Jilet İçinde HTML Kodlamasını Kapatma

static public string SpeakEvil() 
{ 
    return "<script>alert('BLAH!!');</script>"; 
} 

, Razor, bunu kodlayan oldukça haklı olarak HTML. HTML ve JavaScript kelimesi kelimesine yayılacağı şekilde

@StaticFunctions.SpeakEvil() 

Nasıl Razor değil HTML Encode bu var ve herhangi bir komut dosyası aslında çalışır?

cevap

50

Sen Raw() işlevini kullanabilirsiniz ama çoğunlukla veritabanından gelen şeyler için içindir. Bir yardımcı için

Eğer ben bir IHtmlString dönen öneririm var gibi: Eğer yok

static public IHtmlString SpeakEvil() { 
    return new HtmlString("<script>alert('BLAH!!');</script>"); 
} 

Bu şekilde her callsite de Raw() aramak zorunda.

+5

Web tabanlı bir uygulamada RazorEngine kullanıyorum. Benim önerdiğim çözümlerin hiçbiri benim için çalışmıyor, aslında, Html.Raw yöntemi çağrısı bana şu istisnayı veriyor: "Şablon derlenemiyor. 'Html' adı geçerli bağlamda mevcut değil". Bir MvcHtmlString veya bir IHtmlString varsa hala html metni kodlar ancak bir istisna atar. –

+4

Bir web uygulamasının dışında RazorEngine kullanıyorum ve bunu işe yaratamam :(Herhangi bir fikir – leypascua

+0

@blesh & leypascua http://stackoverflow.com/questions/15273327/how-to-prevent- escaping-html-in-traş makinesi-bağımsız Eğer RazorEngine kullanıyorsanız, o zaman bu ilgili soruda ele alınır: http://stackoverflow.com/questions/15273327/how-to-prevent-escaping-html-in- razor-standalone – Ergwun

36

Html.Raw yardımcı programını kullanın.

@Html.Raw(StaticFunctions.SpeakEvil()) 
4

Dönüş şöyle MvcHtmlString.Create() yöntemini çağırarak bir MvcHtmlString (HtmlString gelen devralır):

public static MvcHtmlString HtmlSafe(this string content) 
{ 
    return MvcHtmlString.Create(content); 
} 


Kaynak: Ayrıca, bir dize uzantısı girebileceği

public static MvcHtmlString SpeakEvil() 
{ 
    return MvcHtmlString.Create("<script>alert('BLAH!!');</script>"); 
} 


:
http://geekswithblogs.net/shaunxu/archive/2010/04/10/lt-gt-htmlencode-ihtmlstring-and-mvchtmlstring.aspx

+1

Nitpick, ama "Is" ile başlayan bir yöntem gördüğümde, yöntemin bir soruyu yanıtladığını varsayalım: yani "IsDecimal (0m) => true" –

+0

Sabit :) IsHtmlSafe -> HtmlSafe – Nikkelmann