Asp.net mvc view में html के रूप में स्ट्रिंग प्रदर्शित करें


98

मेरे पास एक नियंत्रक है जो html मार्कअप युक्त स्ट्रिंग उत्पन्न करता है। अब जब मैं इसे विचारों पर प्रदर्शित कर रहा हूं, तो इसे सभी टैग वाले सरल स्ट्रिंग के रूप में प्रदर्शित किया गया है। मैंने इसे ठीक से प्रदर्शित करने के लिए एन्कोड / डिकोड करने के लिए Html हेल्पर का उपयोग करने की कोशिश की, लेकिन यह काम नहीं कर रहा है।

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मदद करनी चाहिए।
सईद नेमाटी

इसके अलावा मुझे लगता है कि आप HtmlStrinकक्षा का उपयोग कर सकते हैं , जैसेHtmlString str = new HtmlString("<span>Some HTML here</span>");
सईद नेमाती

जवाबों:


168

आप करीब हैं जिसका आप उपयोग करना चाहते हैं @Html.Raw(str)

@Html.Encodeतार लेता है और यह सुनिश्चित करता है कि सभी विशेष पात्रों को ठीक से संभाला जाए। इनमें स्पेस जैसे किरदार शामिल हैं।


6
@ Html.Raw वास्तव में क्या मैं जवाब के लिए :), खोज रहा था धन्यवाद है
AFract

IHtmlString @Jerad Rose द्वारा बताए गए बहुत बेहतर हैं
प्रत्यूष धनुका

37

आपको 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 रखने की आवश्यकता होती है, तो मुझे लगता है कि यह आम तौर पर एक बेहतर अभ्यास है। सबसे पहले, यह थोड़ा क्लीनर है। उदाहरण के लिए:

@Html.Raw(str)

की तुलना में:

@str

इसके अलावा, मुझे भी लगता है कि यह थोड़ा सुरक्षित बनाम उपयोग करने वाला है @Html.Raw(), क्योंकि आपका डेटा HTML आपके नियंत्रक में रखा गया है, इस बात की चिंता है। ऐसे वातावरण में जहां आपके सामने के बैक-एंड डेवलपर्स हैं, आपके बैक-एंड डेवलपर्स एचटीएमएल मूल्यों को किस डेटा के साथ जोड़ सकते हैं, इस प्रकार इस चिंता को बैक-एंड (कंट्रोलर) में बनाए रख सकते हैं।

मैं आमतौर पर Html.Raw()जब भी संभव हो उपयोग करने से बचने की कोशिश करता हूं ।

एक और बात ध्यान देने योग्य है, क्या मुझे यकीन नहीं है कि आप कहां असाइन कर रहे हैं str, लेकिन कुछ चीजें जो मुझे इस बात से चिंतित करती हैं कि आप इसे कैसे लागू कर सकते हैं।

सबसे पहले, यह आपके समाधान ( IHtmlStringया Html.Raw) की परवाह किए बिना, एक नियंत्रक में किया जाना चाहिए । आपको अपने विचार में इस तरह के किसी भी तर्क से बचना चाहिए, क्योंकि यह वास्तव में वहां नहीं है।

इसके अतिरिक्त, आपको ViewModelअपने विचार (और फिर से, आदर्श IHtmlStringरूप से संपत्ति प्रकार के रूप में उपयोग करने के लिए) मान प्राप्त करने के लिए आपका उपयोग करना चाहिए । @Html.Encode(str)जब तक आप अपने उदाहरण को सरल बनाने के लिए ऐसा नहीं कर रहे हैं, तब तक कुछ देखना पसंद है।


1
मैं यह बताना चाहता हूं कि कंट्रोलर रूटिंग के लिए हैं, न कि डेटा स्टोरेज के लिए। इसके अलावा, आपके बैक-एंड देवताओं को कोड के मौजूदा अनुबंध को बदलने से बेहतर जानना चाहिए। यूआई एक मॉडल के लिए बाध्य होना चाहिए, और यदि मॉडल तेजी से बदलता है, तो आपकी इकाई के परीक्षण को तोड़ देना चाहिए।
एंथनी मेसन

आपके उत्तर के लिए धन्यवाद। मुझें यह पसंद है।
थॉमस।

हाँ यह उत्तर ज्यादा बेहतर है, मैंने शुरू में Html.Raw का उपयोग किया था, लेकिन जब मैंने इस उत्तर को पढ़ा, तो मैंने तुरंत स्विच किया
प्रत्यूष धनुका

7

आप उपयोग कर सकते हैं @Html.Raw(str)

अधिक के लिए MSDN देखें

HTML मार्क्ड नहीं है कि मार्कअप देता है।

यह विधि IHtmlString वर्ग का उपयोग करते हुए HTML मार्कअप को लपेटती है, जो अनएन्कोडेड HTML को प्रस्तुत करता है।


1

मुझे MVC में HTML इनपुट फ़ील्ड के साथ एक समान समस्या थी। वेब पेज ने केवल क्षेत्र का पहला कीवर्ड दिखाया। उदाहरण: इनपुट फ़ील्ड: "त्वरित ब्राउन लोमड़ी" प्रदर्शित मूल्य: "द"

रिज़ॉल्यूशन को वैल्‍यू स्टेटमेंट में कोट्स को इस प्रकार रखा जाना था:

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

0

मुझे हाल ही में इसी तरह की समस्या हुई थी , और Google ने मुझे यहां उतारा, इसलिए मैंने यह जवाब यहां दिया कि अगर कोई अन्य व्यक्ति यहां भी भूमि के मामले में पूर्णता के लिए आता है।

मैंने देखा कि जब मैंने html को बुरी तरह से स्वरूपित किया था, तो मैं वास्तव में अपने सभी html टैग छीन रहा था , जिसमें केवल गैर-टैग सामग्री शेष थी । मेरे पास विशेष रूप से एक टेबल थी जिसमें एक लापता ओपनिंग टेबल टैग था, और फिर पूरे स्ट्रिंग से मेरे सभी html टैग जहां पूरी तरह से फट गए थे।

तो, अगर ऊपर काम नहीं करता है, और आप अभी भी अपना सिर खरोंच कर रहे हैं, तो वैध होने के लिए भी आपको HTML की जांच करनी चाहिए।

मुझे यह नोटिस करने के बाद भी कि मैं इसे काम कर रहा हूं, MVC उन सभी को टैग कर रहा था जहां मेरे पास कोई नहीं था। यह मुझे बताता है कि वहाँ साफ हो रहा है (एमवीसी 5), और जब ऐसा नहीं हो सकता है, तो यह सभी / कुछ टैग को हटा देता है।

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