এইচটিএমএল স্ট্রিংগুলি লেখার / আউটপুট আউট করা যায় ap


436

আমি নিরাপদে / স্যানিটাইজড এইচটিএমএল একটি ডিবি টেবিলে সংরক্ষণ করেছি।

আমি কীভাবে এই এইচটিএমএল সামগ্রীটি একটি রেজার ভিউতে লেখা থাকতে পারি?

এটি সর্বদা ভালো অক্ষরগুলি থেকে পালিয়ে যায় <এবং এম্পারসেন্ড করে &amp;


76
লোকেদের নীচের আলোচনার দীর্ঘ ইতিহাস সংরক্ষণ করতে -@Html.Raw()
ক্রিস এস

আমার মতো লোকগুলিকে ডায়নামিকালি টাইপ করা ভিউগুলিতে বেনামে ধরণের সাহায্যে এটি করার চেষ্টা করার জন্য, যেখানে এটি কাজ করবে না - আমার আরও নির্দিষ্ট প্রশ্নের উত্তরটি দেখুন। আপনার পরিস্থিতি যদি অনুমতি দেয় তবে দৃ if়-টাইপযুক্ত দৃশ্যের সাথে এই পদ্ধতির ব্যবহার করা আরও ভাল।
brichins

উত্তর:


653

মনে করুন আপনার সামগ্রীটি নামের একটি স্ট্রিংয়ের ভিতরে রয়েছে mystring...

তুমি ব্যবহার করতে পার:

@Html.Raw(mystring)

বিকল্পভাবে আপনি আপনার স্ট্রিংকে রূপান্তর করতে পারেন HtmlStringবা অন্য কোনও ধরণের যা IHtmlStringমডেল বা সরাসরি ইনলাইন প্রয়োগ করে এবং নিয়মিত ব্যবহার করতে পারেন @:

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

এই উত্তরের জন্য ধন্যবাদ। আমি যে সামান্য কাজ শিখছিলাম তা শেষ করতে আমাকে সহায়তা করেছে। :) তবে আমি এমভিসি 3 এর সর্বশেষতম সংস্করণটি ব্যবহার করছি এবং এখনও পর্যন্ত এইচটিএমএল নেই R রা::

1
হাই সার্জিও আমি এমভিসি 3 ব্যবহার করছি এবং আমি কাঁচা পদ্ধতিটি সঠিকভাবে ব্যবহার করছি।
গুই

1
উত্তরের জন্য ধন্যবাদ! আমি এখনও এমভিসি 3 শিখছি এবং এটি আমাকে ছাড়ছিল।
টড রিচার্ডসন

3
@ লোরেঞ্জো, +1 আমি razorসিনট্যাক্স সহ সর্বশেষতম এমভিসি 3 ব্যবহার করছি এবং Html.Rawঅবশ্যই আমার কাছে উপলভ্য।
ক্রিস স্নোডেন

1
লরেঞ্জো, আমি এমভিসি বিটার উল্লেখ কিছু বছর আগের মত সরিয়ে দেওয়ার জন্য উত্তর আপডেট করেছি। ফিরে যেতে / পরিবর্তন নির্দ্বিধায়।
আলেক্সি লেভেনকভ

75

এএসপি.নেট এমভিসি 3-তে আপনার এমন কিছু করা উচিত:

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)

13
আমি এই পদ্ধতিটি পছন্দ করি কারণ এইচটিএমএল. পাস হওয়া স্ট্রিংটি নালার হলে কাঁচা ফুটে ওঠে।
37 স্টার

1
ধন্যবাদ, এটি খুব পরিষ্কার!
হাজ্জাত

64

তুমি ব্যবহার করতে পার

@{ WriteLiteral("html string"); }

5
এটি আমার জন্য দুর্দান্ত ছিল, একটি হ্যাংফায়ার অ্যাপ্লিকেশনটির মধ্যে রেজার ব্যবহার করে ইমেলগুলি প্রেরণ করছিল ... Html.Raw()সেখানে কাজ করে না
শানাবাস

রাইটলিটারালের জন্য 1
বেসিল

11

কখনও কখনও এটি কাঁচা এইচটিএমএল ব্যবহার করা জটিল হতে পারে। বেশিরভাগই এক্সএসএস দুর্বলতার কারণে। যদি এটি উদ্বেগজনক হয় তবে আপনি এখনও কাঁচা এইচটিএমএল ব্যবহার করতে চান তবে আপনি ভীতিজনক অংশগুলি এনকোড করতে পারেন।

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")

ফলাফল স্বরূপ

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)

4

আপনি নিজের স্ট্রিংটি ভিউডাটাতে নিয়ামকটিতে এইভাবে রাখতে পারেন:

 ViewData["string"] = DBstring;

এবং তারপরে এই ভিউডাটাটিকে এইভাবে দেখুন:

@Html.Raw(ViewData["string"].ToString())

2

এছাড়াও ব্যবহার করা থেকে @MvcHtmlString.Create(ViewBag.Stuff) যেমন Dommer দ্বারা প্রস্তাবিত, আমি সুপারিশ করছি ব্যবহার করা AntiXSS হিসাবে প্রস্তাব গ্রন্থাগার phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp -net.aspx

এটি প্রায় সমস্ত সম্ভাব্য এক্সএসএস আক্রমণ স্ট্রিংকে এনকোড করে।


0

রেজারইঙ্গিনে টেম্পলেট ফাংশন ব্যবহারের জন্য সম্পূর্ণ উদাহরণ (উদাহরণস্বরূপ ইমেল তৈরির জন্য):

@model SomeModel
@{
    Func<PropertyChangeInfo, object> PropInfo =
        @<tr class="property">
            <td>
                @item.PropertyName                
            </td>
            <td class="value">
                <small class="old">@item.OldValue</small>
                <small class="new">@item.CurrentValue</small>                
            </td>
        </tr>;
}

<body>

@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }

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