এএসপি.নেট এমভিসি রেজার এনকোডিং ছাড়াই রেন্ডার দেয়


250

রেজার ডিফল্টরূপে স্ট্রিং এনকোড করে। এনকোডিং ছাড়াই রেন্ডারিংয়ের জন্য কি কোনও বিশেষ বাক্য গঠন আছে?

উত্তর:


374

ASP.NET এমভিসি 3 যেহেতু আপনি ব্যবহার করতে পারেন:

@Html.Raw(myString)

8
এটি সম্পূর্ণ সঠিক নয়। হ্যাঁ, আপনি একটি কাঁচা স্ট্রিং canোকাতে পারেন তবে "'<>etc...এগুলি থাকলে পালাতে পারবেন be সঠিক উপায়টি হ'ল এমভিসিএইচটিএমএল স্ট্রিং ব্যবহার করা যা "অবৈধ" অক্ষরগুলিকে মঞ্জুরি দেয়। উদাহরণস্বরূপ, আপনি যদি জসন ডেটা এনকোড করে থাকেন ... পুরো মডেলটি এনকোড না করেই
ড্যানিয়েল বি চ্যাপম্যান

4
ড্যানিয়েল, এইচটিএমএল। রাও () "এইচটিএমএল এনকোডড নয় এমন মার্কআপ দেয়" "
লুকাস

1
এইচটিএমএল.রো () উদ্ধৃতিগুলি এনকোড করেছে ..."myAttr='hello';myInt=10"
সার্জ করুন

4
এটি উদ্ধৃতিগুলি এনকোড করে না। এটি স্পষ্ট করে ডকুমেন্টেশন ছাড়াও এটিকে দিন হিসাবে বলা হয়েছে ( "এই পদ্ধতিটি এইচটিএমএল স্ট্রিং ক্লাস ব্যবহার করে এইচটিএমএল মার্কআপকে মোড়কে দেয়, যা আনইনকোডযুক্ত এইচটিএমএলকে রেন্ডার করে ।" ) আমি এটিও পরীক্ষা করে দেখেছি এবং উদ্ধৃতিগুলি এনকোড করা হয়নি।
জেমস উইলকিনস


31

পাশাপাশি ইতিমধ্যে উল্লিখিত @ এইচটিএমএল.রা (স্ট্রিং) পদ্ধতির হিসাবে আপনি যদি কোনও এমভিসিএইচটিএমএল স্ট্রিং আউটপুট করেন তবে এটি এনকোড হবে না। এইচটিএমএলহেল্পারে আপনার নিজের এক্সটেনশনগুলি যুক্ত করার সময়, বা আপনার ভিউ মডেল থেকে এমন কোনও মান ফেরত দেওয়ার সময় এটি কার্যকর হতে পারে যা আপনি জানেন যে এইচটিএমএল থাকতে পারে।

উদাহরণস্বরূপ, যদি আপনার দেখার মডেলটি ছিল:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

কোর 1.0+ (এবং এমভিসি 5+) এর জন্য এইচটিএমএলস্ট্রিং ব্যবহার করুন

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

তারপর

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>

10

@Html.Raw()সতর্কতার সাথে ব্যবহার করুন কারণ আপনি এনকোডিং এবং সুরক্ষা নিয়ে আরও সমস্যার সৃষ্টি করতে পারেন। আমি নিজেই এটি করতে হয়েছিল বলে আমি ব্যবহারের কেসটি বুঝতে পেরেছি, তবে সাবধানতার সাথে ... কেবল সমস্ত পাঠ্য প্রবেশের অনুমতি দেওয়া এড়াতে হবে। উদাহরণস্বরূপ কেবল নির্দিষ্ট অক্ষর ক্রম সংরক্ষণ / রূপান্তর করুন এবং সর্বদা বাকীটি এনকোড করুন:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

তারপরে আপনার মনের শান্তি হবে যে আপনি কোনও সম্ভাব্য সুরক্ষা গর্ত তৈরি করেন নি এবং কোনও বিশেষ / বিদেশী অক্ষর সমস্ত ব্রাউজারে সঠিকভাবে প্রদর্শিত হয়।


+1 ঠিক আমার যা প্রয়োজন! স্ট্রিংটিকে এখনও এনকোড করা দরকার তবে লাইনটির রিটার্নটি এইচটিএমএল হওয়া দরকার। ধন্যবাদ!
পিটার

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
এএসপি.নেট

5

অ্যাকশনলিঙ্কের ক্ষেত্রে, এটি সাধারণত লিঙ্ক পাঠ্যটিতে এইচটিপি ইউটিলিটি E এনকোড ব্যবহার করে। HttpUtility.HtmlDecode(myString) সেক্ষেত্রে আপনি যে স্ট্রিংটি উত্তীর্ণ করতে চেয়েছিলেন সেটির ডিকোড করতে এইচটিএমএলএকশনলিঙ্ক ব্যবহার করার সময় আপনি এটি আমার জন্য কাজ করতে পারেন । উদাহরণ:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.