ASP.NET MVC रेजर एन्कोडिंग के बिना प्रस्तुत करता है


250

रेजर डिफ़ॉल्ट रूप से स्ट्रिंग को एनकोड करता है। वहाँ एन्कोडिंग के बिना प्रतिपादन के लिए कोई विशेष वाक्यविन्यास है?

जवाबों:


374

ASP.NET MVC 3 के बाद से, आप उपयोग कर सकते हैं:

@Html.Raw(myString)

8
यह पूरी तरह सही नहीं है। हां, आप एक कच्चा तार डाल सकते हैं लेकिन अगर आपके पास "'<>etc...ये हैं तो बच जाएंगे। सही तरीका MvcHtmlString का उपयोग करना है जो "अवैध" वर्णों की अनुमति देगा। उदाहरण के लिए, यदि आप Json डेटा को एन्कोडिंग कर रहे हैं ... एक पूरे मॉडल को एन्कोडिंग के बिना
डैनियल बी। चैपमैन

4
डैनियल, Html.Raw () "मार्कअप देता है जो HTML एन्कोडेड नहीं है।"
लुकास

1
Html.Raw () उद्धरण चिह्नों ..."myAttr='hello';myInt=10"
सर्ज

4
यह उद्धरण को सांकेतिक शब्दों में बदलना नहीं है। स्पष्ट प्रलेखन दिन के रूप में सादे यह बताते हुए इसके अलावा ( "यह पद्धति लपेटता HTML मार्कअप IHtmlString वर्ग है, जो renders का उपयोग कर unencoded एचटीएमएल।" ) मैं भी इस परीक्षण किया है और उद्धरण इनकोडिंग नहीं कर रहे हैं।
जेम्स विल्किंस


31

साथ ही साथ पहले से ही उल्लेख किया गया @ Html.Raw (स्ट्रिंग) दृष्टिकोण, यदि आप एक MvcHtml का उत्पादन करते हैं, तो यह एन्कोड नहीं किया जाएगा। HtmlHelper में अपने स्वयं के एक्सटेंशन जोड़ते समय, या जब आप जानते हैं कि HTML शामिल है, तो अपने दृश्य मॉडल से मान वापस करते समय यह उपयोगी हो सकता है।

उदाहरण के लिए, यदि आपका दृश्य मॉडल था:

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

Core 1.0+ (और MVC 5+) के लिए HtmlString का उपयोग करें

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 होना चाहिए। धन्यवाद!
पीटर

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))ASP.NET कोर के लिए
kenjiuno

5

ActionLink के मामले में, यह आमतौर पर लिंक टेक्स्ट पर HttpUtility.Encode का उपयोग करता है। उस स्थिति में आप इसका उपयोग कर सकते हैं HttpUtility.HtmlDecode(myString) जब मैंने उस स्ट्रिंग को डीकोड करने के लिए HtmlActionLink का उपयोग किया था जिसे मैं पास करना चाहता था। उदाहरण के लिए:

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



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