এএসপিএন এমভিসি ভিউতে এইচটিএমএল হিসাবে স্ট্রিং প্রদর্শন করুন


100

আমার একটি কন্ট্রোলার রয়েছে যা এইচটিএমএল মার্কআপগুলিকে ধারণ করে স্ট্রিং উত্পন্ন করে views এখন যখন আমি এগুলি ভিউগুলিতে প্রদর্শন করি তখন এটি সমস্ত ট্যাগযুক্ত সরল স্ট্রিং হিসাবে প্রদর্শিত হয়। এটিকে সঠিকভাবে প্রদর্শন করার জন্য আমি এনকোড / ডিকোড করতে এইচটিএমএল সহায়ক ব্যবহার করার চেষ্টা করেছি, তবে এটি কাজ করছে না।

string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";

আমার মতামত,

@Html.Encode(str)

6
আমার ধারণা Html.Rawসাহায্য করা উচিত
সাইদ নেমতি

4
এছাড়াও আমি মনে করি আপনি HtmlStrinক্লাসটি ব্যবহার করতে পারেন , যেমনHtmlString str = new HtmlString("<span>Some HTML here</span>");
সাইদ নেমতি

উত্তর:


172

আপনি কাছাকাছি আপনি ব্যবহার করতে চান @Html.Raw(str)

@Html.Encodeস্ট্রিং নেয় এবং নিশ্চিত করে যে সমস্ত বিশেষ অক্ষর সঠিকভাবে পরিচালনা করা হয়েছে। এর মধ্যে স্পেসের মতো অক্ষর অন্তর্ভুক্ত রয়েছে।


6
@ এইচটিএমএল. রা. ঠিক আমি যা খুঁজছিলাম, উত্তরের জন্য ধন্যবাদ :)
আফ্রিক্ট করুন

@ জেরাদ রোজ দ্বারা উল্লিখিত আইএইচটিএমএল স্ট্রিং অনেক ভাল
প্রত্যুষ

38

IHtmlStringপরিবর্তে আপনার ব্যবহার করা উচিত :

IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");

যখনই আপনার কাছে মডেল বৈশিষ্ট্য বা ভেরিয়েবলগুলি রয়েছে যা এইচটিএমএল ধরে রাখা দরকার, আমি মনে করি এটি সাধারণত একটি ভাল অনুশীলন। প্রথমত, এটি কিছুটা ক্লিনার। উদাহরণ স্বরূপ:

@Html.Raw(str)

তুলনা করা:

@str

@Html.Raw()আপনার ডেটা এইচটিএমএল কিনা আপনার উদ্বেগকে আপনার নিয়ামকের মধ্যে রাখা হয়েছে কিনা তা উদ্বেগ হিসাবে এটি ব্যবহার করে এটি কিছুটা নিরাপদ বনামও মনে করি । এমন পরিবেশে যেখানে আপনার সামনে-শেষ বনাম, ব্যাক-এন্ড বিকাশকারী রয়েছে, আপনার ব্যাক-এন্ড বিকাশকারীরা এইচটিএমএল মানগুলি কীভাবে ধারণ করতে পারে তার সাথে আরও সুরক্ষিত হতে পারে, এইভাবে এই উদ্বেগটিকে ব্যাক-এন্ডে (নিয়ামক) রেখে দেয়।

আমি সাধারণত Html.Raw()যখনই সম্ভব ব্যবহার না করার চেষ্টা করি ।

আরেকটি বিষয় লক্ষণীয়, আপনি কোথায় নিযুক্ত হচ্ছেন তা সম্পর্কে আমি নিশ্চিত নই str, তবে আপনি কীভাবে এটি বাস্তবায়ন করছেন তা নিয়ে আমাকে চিন্তিত কয়েকটি বিষয়।

প্রথমত, এটি আপনার নিয়ন্ত্রণ ( IHtmlStringবা Html.Raw) নির্বিশেষে একটি নিয়ামকের মধ্যে করা উচিত । আপনার দৃষ্টিভঙ্গিতে আপনার মতো কোনও যুক্তি এড়ানো উচিত, কারণ এটি সত্যিকারের অন্তর্ভুক্ত নয়।

অতিরিক্তভাবে, ViewModelআপনার নিজের ভিউতে মান পাওয়ার জন্য আপনার ব্যবহার করা উচিত (এবং আবার আদর্শভাবে IHtmlStringসম্পত্তি ধরণের হিসাবে ব্যবহার করা)। @Html.Encode(str)আপনি যদি আপনার উদাহরণটি সহজ করার জন্য এটি না করতেন তবে এর মতো কিছু দেখানো সামান্য বিষয় is


4
আমি চিহ্নিত করতে চাই যে নিয়ন্ত্রকরা রাউটিংয়ের জন্য, না ডেটা সঞ্চয় করার জন্য। এছাড়াও, কোডটির বিদ্যমান চুক্তিটি পরিবর্তন করার চেয়ে আপনার ব্যাক-এন্ড ডেভসগুলি আরও ভালভাবে জানতে হবে know ইউআই একটি মডেলের সাথে আবদ্ধ হওয়া উচিত এবং যদি মডেলটি একেবারে পরিবর্তিত হয় তবে আপনার ইউনিট পরীক্ষাগুলি বিরতি দেওয়া উচিত।
অ্যান্টনি ম্যাসন

আপনার উত্তরের জন্য ধন্যবাদ. আমি এটা পছন্দ করি.
থমাস.বেঞ্জ

হ্যাঁ এই উত্তর অনেক ভালো, আমি প্রাথমিকভাবে ব্যবহৃত হয় Html.Raw কিন্তু যখন আমি এই উত্তর পড়া, আমি অবিলম্বে সুইচড
Pratyush Dhanuka

7

তুমি ব্যবহার করতে পার @Html.Raw(str)

আরও জানতে এমএসডিএন দেখুন

এইচটিএমএল এনকোডড নয় এমন মার্কআপ দেয়।

এই পদ্ধতিটি আইএইচটিএমএল স্ট্রিং ক্লাস ব্যবহার করে এইচটিএমএল মার্কআপকে মোড়কে রাখে যা আনঙ্কডবিহীন এইচটিএমএলকে রেন্ডার করে।


1

এমভিসিতে এইচটিএমএল ইনপুট ক্ষেত্রগুলির সাথে আমার একই সমস্যা ছিল। ওয়েব পৃষ্ঠাযুক্ত ক্ষেত্রটির প্রথম কীওয়ার্ডটি দেখায়। উদাহরণ: ইনপুট ক্ষেত্র: "দ্রুত ব্রাউন শিয়াল" প্রদর্শিত মান: "দ্য"

রেজুলেশনটি ভ্যারিয়েবলকে মূল্য বিবৃতিতে নিম্নরূপে রাখার ছিল:

<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
       onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">

0

আমার সম্প্রতি একইরকম সমস্যা হয়েছিল , এবং গুগল আমাকে এখানে অবতরণ করেছে, তাই অন্যরাও এখানে পূর্ণতার জন্য, আমি উত্তরটি এখানে রেখেছি।

আমি লক্ষ্য করেছি যে আমি যখন এইচটিএমএলকে খারাপভাবে ফর্ম্যাট করেছি তখন আমার কেবলমাত্র সমস্ত এইচটিএমএল ট্যাগ সরিয়ে নিয়ে যাচ্ছিল , কেবলমাত্র নন-ট্যাগ সামগ্রী বাকি ছিল । আমার বিশেষত একটি খোলার শুরুর টেবিল ট্যাগ সহ একটি টেবিল ছিল এবং তারপরে পুরো স্ট্রিং থেকে আমার সমস্ত এইচটিএমএল ট্যাগ যেখানে সম্পূর্ণরূপে ছিটকে গেল।

সুতরাং, যদি উপরের কাজ না করে এবং আপনি এখনও আপনার মাথা আঁচড়ান, তবে আপনাকে বৈধ হওয়ার জন্য এইচটিএমএলও পরীক্ষা করে দেখুন

আমি এটি কাজ করার পরেও লক্ষ্য করেছি, এমভিসি যেখানে আমার কিছুই ছিল না এমন টিডি ট্যাগ যুক্ত করছিল। এটি আমাকে বলছে সেখানে পরিষ্কার হয়ে যাচ্ছে (এমভিসি 5), এবং এটি যখন না ঘটতে পারে তখন সমস্ত / কিছু ট্যাগ বের করে দেয়।

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