2011-02-11 12 views
21

में HTML एन्कोडिंग बंद करें मेरे पास एक ऐसा फ़ंक्शन है जो जावास्क्रिप्ट और/या HTML का स्निपेट देता है।रेजर

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

दृश्य में, रेजर काफी सही रूप से एचटीएमएल एन्कोडिंग है, जैसा कि अधिकतर उम्मीद है।

@StaticFunctions.SpeakEvil() 

मैं कैसे इतना है कि HTML और जावास्क्रिप्ट शब्दशः उत्सर्जित होते हैं, रेजर नहीं एचटीएमएल इस एनकोड की क्या ज़रूरत है, और किसी भी स्क्रिप्ट वास्तव में चलाता है?

उत्तर

50

आप Raw() समारोह इस्तेमाल कर सकते हैं लेकिन यह ज्यादातर चीजें हैं जो डेटाबेस से आते हैं के लिए है।

एक सहायक के लिए की तरह आप मैं एक IHtmlString लौटने सुझाव है:

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

इस तरह आप की जरूरत नहीं है कि हर callsite पर Raw() कॉल करनी होगी।

+5

मैं एक गैर-वेब अनुप्रयोग में RazorEngine का उपयोग कर रहा हूं। आपके प्रस्तावित समाधानों में से कोई भी मेरे लिए काम नहीं कर रहा है, वास्तव में, Html.Raw विधि कॉल मुझे निम्नलिखित अपवाद दे रहा है: "टेम्पलेट संकलित करने में असमर्थ। नाम 'एचटीएमएल' वर्तमान संदर्भ में मौजूद नहीं है"। अगर मेरे पास एक MvcHtmlString है, या IHtmlString है तो यह अभी भी HTML को टेक्स्ट एन्कोड करता है लेकिन अपवाद नहीं फेंकता है। –

+4

मैं एक वेब एप्लिकेशन के बाहर RazorEngine का उपयोग कर रहा हूं, और इसे काम पर नहीं ला सकता :(कोई विचार? – leypascua

+0

@ ब्लेश और लीपस्कुआ http://stackoverflow.com/questions/15273327/how-to-prevent- escaping-html-in-razor-standalone यदि आप रेजोरइंजिन का उपयोग कर रहे हैं, तो यह इस संबंधित प्रश्न में शामिल है: http://stackoverflow.com/questions/15273327/how-to-prevent-escaping-html-in- रेज़र-स्टैंडअलोन – Ergwun

36

Html.Raw सहायक का उपयोग करें।

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

वापसी एक MvcHtmlString (HtmlString से विरासत में मिली) MvcHtmlString.Create() विधि इतनी तरह फोन करके:

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


स्रोत:

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

नाइटपिक, लेकिन जब मुझे "है" से शुरू करने वाली विधि दिखाई देती है, तो मुझे लगता है कि विधि एक प्रश्न का उत्तर देती है। यानी 'IsDecimal (0m) => true' –

+0

फिक्स्ड :) IsHtmlSafe -> HTMLSafe – Nikkelmann