রেজারইঙ্গাইন ব্যবহার করার সময় আমি কীভাবে কাঁচা এইচটিএমএল আউটপুট করব (এমভিসি থেকে নয়)


105

আমি এইচটিএমএল সামগ্রী সহ ইমেলগুলি তৈরি করার চেষ্টা করছি। এই বিষয়বস্তুটি ইতিমধ্যে স্যানিটেশন এর মধ্য দিয়ে গেছে সুতরাং আমি যখন ফোন করি তখন আমি সে বিষয়ে উদ্বিগ্ন নই:

Razor.Parse(template, model);

নিম্নলিখিত রেজার টেমপ্লেটে:

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

আউটপুট হওয়া ইমেলটি এইচটিএমএল এনকোডযুক্ত, তবে আমার এটি ডিকোড করা দরকার। আমি কীভাবে এটি সম্পাদন করতে পারি?


আমি এটির উত্তর দিয়েছি, তবে এটি সদৃশ উত্তর হিসাবে মুছে ফেলা হয়েছে কারণ আমি এখানে এটির উত্তর দিয়েছি: stackoverflow.com/questions/23603593/… ... এই উত্তরটি এমভিসি এবং রেজারেনজাইন উভয়ের পক্ষে কাজ করে।
ব্রায়ান রাইস

উত্তর:


181

রেজারজেইন, এমভিসির রেজার ভিউ ইঞ্জিনের মতো, টেমপ্লেটে লিখিত মানগুলি স্বয়ংক্রিয়ভাবে এনকোড করবে। এটি পেতে, আমরা একটি ইন্টারফেস পরিচিত করেছি যার IEncodedStringসাথে ডিফল্ট বাস্তবায়ন হয় HtmlEncodedStringএবং RawString

আধুনিক ব্যবহারের জন্য, কেবল ইনবিল্ট Rawপদ্ধতিতে কল করুন TemplateBase:

@Raw(Model.EmailContent)

4
@ ম্যাথিউ পুনরজীবনের জন্য দুঃখিত, তবে এই সংকলন করা সত্ত্বেও, এটি ভিএস এইচটিএমএল সম্পাদকটিতে দেখতে সুন্দর দেখাচ্ছে না, এটি মডেল বা কাঁচাটিকে আর চিনতে পারবে না। কোন workaround?
জেফ

5
@ জেফ আমি ভাবছি যে সঠিক পন্থাটি রেজারইঙ্গিনের জন্য একটি স্ট্যাটিক ক্লাস এইচটিএমএল.সি.কে একটি স্ট্যাটিক পদ্ধতি রয়েছে, তা প্রকাশ করা উচিত aw তাই এটি এইচটিএমএল-র কাছে স্ট্যান্ডার্ড কলগুলি প্রসেস করবে যাতে ভিএস রেজারে সঠিক সিনট্যাক্স হাইলাইট করার জন্য ব্যবহার করা যেতে পারে এডিটর।
টড থমসন

8
@ ম্যানফ্রেড @ রাও () রেজারইঙ্গিনে দুর্দান্ত কাজ করে (এএসপি নয় নেট এমভিসির রেজার;))
জেফ

এটিও সমাধান করা দেখতে চাই। এর ফলে পুরো প্রকল্পটি এমভিসি বিল্ডভিউগুলি সক্ষম করে না ...
গাইডআপু

2
"এইচটিএমএল এনকোড স্ট্রিং" কাজ করে না! পরিবর্তে ব্যবহার করুন: কাঁচা স্ট্রিং। একটি উদাহরণ দেখুন যে কাজ করে! পাবলিক রেজারএজাইন.টেক্সট.আইএনকোডড স্ট্রিং গেটমার্কা ফিনাল ডকুমেন্টো () new নতুন রেজারইঙ্গাইন.টেক্সট.রাউস্ট্রিং ("<ডিভি> হাই হাই! </ ডিভি>") ফেরান;
চার্লস

15

এফওয়াইআই আমার কাছে একটি কাঁটাচামচ রয়েছে যা এখানে @ এইচটিএমএল.রাউ (...) সিনট্যাক্স যুক্ত করে:

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


3
@ এইচটিএমএল.রউ () এর জন্য কোনও সামনের কনফিগারেশন প্রয়োজন নেই। ভাল সমাধান।
মার্টিনজেএইচ

আমিও. আমি রেজার কোডে এইচটিএমএল ট্যাগ এবং মানগুলি তৈরি করতে সক্ষম হয়েছি এবং এটি ভিউডাটা দিয়ে দেখার জন্য পাস করতে পেরেছি এবং @ এইচটিএমএল.আরএস (ভিউডেটা ["নেক্সটইভেন্ট"]
জাস্টজহান

3

আপনার টেমপ্লেটগুলির জন্য যদি আপনার একটি কাস্টম বেস শ্রেণি Writeথাকে তবে আপনি সাধারণ এমভিসি টেম্পলেটটির অনুরূপ আচরণের জন্য পদ্ধতি কোড করতে পারেন : যদি আউটপুট মান হয় তবে 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

আমি রেজারইঙ্গাইন 3.8.2 ব্যবহার করছি এবং @Raw(Model.Content)আমার জন্য পুরোপুরি সূক্ষ্ম কাজ করছি।



-1

আমি এই সব আমার সাথে কাজ পেয়েছি।

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


  @MvcHtmlString.Create(res)

  @Html.Raw(res)

4
আপনি এমভিসি লাইব্রেরি ব্যবহার করছেন যা রেজার ইঞ্জিন থেকে পাওয়া যায় না, সুতরাং এটি প্রশ্নের উত্তর নয়।
অলিগোফ্রেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.