2012-03-12 12 views
85

मैं HTML सामग्री के साथ ईमेल जेनरेट करने का प्रयास कर रहा हूं। इस सामग्री को पहले से ही स्वच्छता के माध्यम से चला गया है तो मैं इस संबंध में चिंतित नहीं हूँ, लेकिन जब मैं फोन:RazorEngine (एमवीसी से नहीं) का उपयोग करते समय मैं कच्चे HTML को आउटपुट कैसे करूं

Razor.Parse(template, model); 
निम्नलिखित उस्तरा टेम्पलेट पर

:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
    <body> 
     @(new System.Web.HtmlString(Model.EmailContent)) 
    </body> 
</html> 

ईमेल कि outputted है HTML इनकोडिंग, लेकिन मुझे इसे डीकोड करने की ज़रूरत है। मैं यह कैसे हासिल कर सकता हूं?

+0

मैंने इसका उत्तर दिया, लेकिन इसे डुप्लिकेट उत्तर के रूप में हटा दिया गया क्योंकि मैंने इसे यहां उत्तर दिया: http://stackoverflow.com/questions/23603593/razorengine-cannot-use-html-raw ... यह उत्तर दोनों के लिए काम करता है एमवीसी और रेजरइंजिन। –

उत्तर

152

एमवीसी के रेजर व्यू इंजन की तरह रेजोरइंजिन स्वचालित रूप से टेम्पलेट पर लिखे गए मानों को एन्कोड करेगा। इसके आस-पास पहुंचने के लिए, हमने IEncodedString नामक एक इंटरफेस पेश किया है, जिसमें डिफ़ॉल्ट कार्यान्वयन HtmlEncodedString और RawString है।

बाद का उपयोग करने के लिए बस TemplateBase की इनबिल्ट Raw विधि के लिए एक फोन करना:

@Raw(Model.EmailContent) 
+0

उत्कृष्ट काम किया! धन्यवाद – KallDrexx

+0

धन्यवाद! आपने मेरा दिन बचा लिया! – Sergey

+0

मेरा दिन भी बचाया! – Ozzy

10
FYI करें

मैं एक कांटा कि @ Html.Raw (...) वाक्यविन्यास यहाँ शामिल हैं:

https://github.com/Antaris/RazorEngine/pull/105

+0

@ Html.Raw() कोई अग्रिम विन्यास आवश्यक; सार्वजनिक RazorEngine.Text.IEncodedString GetMarcaFinalDocumento() {नई RazorEngine.Text.RawString ("

Hi there!
") लौट}। अच्छा समाधान। – MartinJH

2

आप अपने टेम्पलेट के लिए एक कस्टम आधार वर्ग है, तो आप सामान्य MVC टेम्पलेट के समान व्यवहार करने के लिए Write विधि कोड कर सकते हैं: अगर उत्पादन मूल्य है IHtmlString यह enco नहीं करना चाहिए डी

// Writes the results of expressions like: "@foo.Bar" 
public virtual void Write(object value) 
{ 
    if (value is IHtmlString) 
     WriteLiteral(value); 
    else 
     WriteLiteral(AntiXssEncoder.HtmlEncode(value.ToString(), false)); 
} 

// Writes literals like markup: "<p>Foo</p>" 
public virtual void WriteLiteral(object value) 
{ 
    Buffer.Append(value); 
} 
0

मैं इन मेरे साथ काम किया के सभी पाया:

यहाँ कोड मैं अपने TemplateBase कक्षा में उपयोग कर रहा हूँ है।

@{var myHtmlString = new HtmlString(res);} 
@myHtmlString 


    @MvcHtmlString.Create(res) 

    @Html.Raw(res) 
+3

आप एमवीसी लाइब्रेरी का उपयोग कर रहे हैं जो रेजर इंजन से उपलब्ध नहीं है, इसलिए यह सवाल का जवाब नहीं है। – oligofren

0

मैं RazorEngine 3.8.2 का उपयोग कर रहा है और @Raw(Model.Content) मेरे लिए बिल्कुल ठीक काम कर रहा है।

संबंधित मुद्दे