मैं रॉसर आउटपुट का उपयोग कैसे करता हूं जब रेजरगाइन (MVC से नहीं)


105

मैं 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>

जो ईमेल आउटपुट किया गया है वह HTMl एनकोडेड है, लेकिन मुझे इसे डीकोड करने की आवश्यकता है। मैं यह कैसे हासिल कर सकता हूं?


मैंने इसका उत्तर दिया, लेकिन इसे एक डुप्लिकेट उत्तर के रूप में हटा दिया गया क्योंकि मैंने इसे यहाँ उत्तर दिया: stackoverflow.com/questions/23603593/… ... यह उत्तर MVC और रेज़रॉइन दोनों के लिए काम करता है।
ब्रायन राइस

जवाबों:


181

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

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

@Raw(Model.EmailContent)

4
@ मैथ्यू को पुनर्जीवित करने के लिए क्षमा करें, लेकिन यह संकलन होने के बावजूद, यह वीएस एचटीएमएल संपादक में सुंदर नहीं दिखता है, यह मॉडल या रॉ को अब नहीं पहचानता है। किसी भी काम?
जेफ

5
@ जेफ़ मैं सोच रहा हूँ कि रेज़रगाइन के लिए सही तरीका है एक स्टैटिक क्लास Html.cs को उजागर करना जो एक स्टैटिक तरीका है। संपादक।
टॉड थॉमसन

8
@ मैनफ़्रेड @ राउ () रेज़रऑंगाइन (ASP.NET MVC के रेज़र;) में ठीक काम करता है)
जेफ

इस हल को भी देखना चाहेंगे। यह पूरी परियोजना को MvcBuildViews सक्षम करने के साथ नहीं बनाने का कारण बनता है ...
10

2
"HtmlEncodedString" काम नहीं करता है! इसके बजाय का उपयोग करें: RawString। एक उदाहरण देखें जो काम करता है! सार्वजनिक RazorEngine.Text.IEncodedString GetMarcaFinalDocumento () {नई RazorEngine.Text.RawString वापसी ( "<div> हाय </ div>!");}
चार्ल्स

15

FYI करें मेरे पास एक कांटा है जिसमें @ Html.Raw (...) सिंटैक्स शामिल है:

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


3
@ Html.Raw () को अपफ्रंट कॉन्फ़िगरेशन की आवश्यकता नहीं है। अच्छा समाधान।
मार्टिनजे

मैं भी। मैं रेजर कोड में HTML टैग और मान उत्पन्न करने में सक्षम था और इसे ViewData के साथ देखें और @ Html.Ras (ViewData ["NextEvent"] का उपयोग करके प्रदर्शित करें
JustJohn

3

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

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

// 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);
}

3

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



-1

मैंने पाया कि ये सभी मेरे साथ काम करते हैं।

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


  @MvcHtmlString.Create(res)

  @Html.Raw(res)

4
आप एमवीसी लाइब्रेरी का उपयोग कर रहे हैं जो रेजर इंजन से उपलब्ध नहीं है, इसलिए यह प्रश्न का उत्तर नहीं है।
ऑलिगॉफ्रेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.