2011-01-04 6 views
26

रेजर व्यू इंजन के साथ, जब भी आप पृष्ठ पर सीधे एक स्ट्रिंग आउटपुट करते हैं, तो यह HTML एन्कोडेड होता है। उदाहरण के लिए:नए रेजर व्यू इंजन के साथ, मेरे एचटीएमएल हेल्पर रिटर्न स्ट्रिंग या आईएचटीएमस्ट्रिंग को चाहिए?

@"<p>Hello World</p>" 

वास्तव में के रूप में पृष्ठ पर उत्पादन प्राप्त होगा:

< पी > नमस्ते विश्व </p >

: कौन सा रूप में ब्राउज़र में तब दिखाई देते हैं

&lt;p&gt;Hello World &lt;/p&gt; 

हालांकि समस्या है, एचटीएमएल हेल्पर्स बनाते समय, पुराने एएसपीएक्स व्यू इंजन के साथ मैं बस retu एक स्ट्रिंग, और ब्राउज़र के लिए आउटपुट:

<%= Html.MyCoolHelperMethod(); %> 

तो मेरा प्रश्न मूल रूप से यह है। जिस स्थिति में

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return new helper.Raw("<p>Hello World</p>"); 
} 

मैं बस अपना cshtml में ऐसा कर सकते हैं: मैं यह कर करो

@Html.MyCoolHelperMethod(); 

या मैं ऐसा करते हैं:

जिस स्थिति में
public static string MyCoolHelperMethod(this HtmlHelper helper) 
{ 
    return "<p>Hello World</p>"; 
} 

मैं करने की जरूरत है मेरे सीएसटीएमएल में काम करें:

@Html.Raw(Html.MyCoolHelperMethod()); 

स्पष्ट रूप से पहला दृष्टिकोण एएच दृश्य को बहुत साफ दिखता है, लेकिन मैं बस सोच रहा हूं कि सामान्य पैटर्न वास्तव में मददगारों के लिए IHtmlString लौटने के लिए है और मैं अतीत में गलत कर रहा हूं।

+0

इसे देखें: http://stackoverflow.com/questions/2293357/what-is-an-mvchtmlstring-and-when-should-i-use-it आपको IHtmlString – LukLed

उत्तर

38

ज्यादातर मामलों में आपको IHtmlString का उदाहरण वापस करना चाहिए। अंतर्निहित हेल्पर्स के बाद यह पैटर्न है * और इसका मतलब है कि एक सहायक के उपभोक्ता को अंडर-एन्कोडिंग के बारे में चिंता करने की आवश्यकता नहीं है।

Raw फ़ंक्शन का उपयोग करने के बजाय आपको शायद HtmlString का एक नया उदाहरण वापस करना चाहिए।

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { 
    return new HtmlString("<p>Hello World</p>"); 
} 

* ध्यान दें कि MVC 3 वास्तव में अपने सहायकों की वापसी प्रकार के रूप में MvcHtmlString का उपयोग करता है, लेकिन इस MVC 2 दिनों से पकड़ मिली है। (जटिल कहानी, लेकिन संक्षेप में, IHtmlString केवल .NET 4 में पेश की गई थी और चूंकि एमवीसी 2 समर्थित है .NET 3.5 MvcHtmlString प्रकार को मध्यवर्ती चरण के रूप में पेश किया गया था)। एमवीसी 3 और उच्चतम को लक्षित करने वाले सभी सहायकों को IHtmlString वापस करना चाहिए।

+0

वापस करना चाहिए "सभी सहायक एमवीसी 3 को लक्षित करते हैं और उच्च IHtmlString वापस करना चाहिए। " - बस मुझे क्या पता होना चाहिए! –