रेजर डिफ़ॉल्ट रूप से स्ट्रिंग को एनकोड करता है। वहाँ एन्कोडिंग के बिना प्रतिपादन के लिए कोई विशेष वाक्यविन्यास है?
रेजर डिफ़ॉल्ट रूप से स्ट्रिंग को एनकोड करता है। वहाँ एन्कोडिंग के बिना प्रतिपादन के लिए कोई विशेष वाक्यविन्यास है?
जवाबों:
ASP.NET MVC 3 के बाद से, आप उपयोग कर सकते हैं:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
साथ ही साथ पहले से ही उल्लेख किया गया @ 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>
@Html.Raw()
एन्कोडिंग और सुरक्षा के साथ अधिक परेशानी का कारण हो सकता है, सावधानी के साथ प्रयोग करें । मैं उपयोग के मामले को समझता हूं क्योंकि मुझे यह स्वयं करना था, लेकिन ध्यान से ... बस सभी पाठ के माध्यम से अनुमति देने से बचें। उदाहरण के लिए केवल विशिष्ट चरित्र दृश्यों को संरक्षित / परिवर्तित करें और हमेशा बाकी को एन्कोड करें:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
तब आपके मन में शांति होती है कि आपने एक संभावित सुरक्षा छेद नहीं बनाया है और सभी ब्राउज़रों में कोई विशेष / विदेशी अक्षर सही ढंग से प्रदर्शित होते हैं।
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
ASP.NET कोर के लिए
ActionLink के मामले में, यह आमतौर पर लिंक टेक्स्ट पर HttpUtility.Encode का उपयोग करता है। उस स्थिति में आप इसका उपयोग कर सकते हैं
HttpUtility.HtmlDecode(myString)
जब मैंने उस स्ट्रिंग को डीकोड करने के लिए HtmlActionLink का उपयोग किया था जिसे मैं पास करना चाहता था। उदाहरण के लिए:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
आप WriteLiteral विधि का भी उपयोग कर सकते हैं
"'<>etc...
ये हैं तो बच जाएंगे। सही तरीका MvcHtmlString का उपयोग करना है जो "अवैध" वर्णों की अनुमति देगा। उदाहरण के लिए, यदि आप Json डेटा को एन्कोडिंग कर रहे हैं ... एक पूरे मॉडल को एन्कोडिंग के बिना