2009-02-21 18 views
14

वैकल्पिक उपकरणों के लिए अनुकूली प्रतिपादन से लाभ के बाहर, यह कभी मतलब है इस कोड के सभी लिखने के लिए:यदि आप अनुकूली प्रतिपादन से लाभ नहीं ले रहे हैं तो HtmlTextWriter का उपयोग करने के कोई लाभ हैं?

writer.WriteBeginTag("table"); 
writer.WriteBeginTag("tr"); 
writer.WriteBeginTag("td"); 
writer.Write(HtmlTextWriter.TagRightChar); 
writer.WriteEncodedText(someTextVariable); 
writer.WriteEndTag("td"); 
writer.WriteEndTag("tr"); 
writer.WriteEndTag("table"); 

StringBuilder बस इस के साथ एक ही बात का निर्माण कर सकता है जब:

sb.Append("<table><tr><td>"); 
sb.Append(someTextVariable); 
sb.Append("</td></tr></table>"); 
+0

यहां http: // stackoverflow देखें।कॉम/प्रश्न/48 9 6 9 1/उपयोग-एचटीएमएलटीक्स्ट्राइटर-टू-रेंडर-सर्वर-कंट्रोल/48 9 761 # 48 9 761 –

उत्तर

12

मैं HtmlTextWriter का उपयोग करने के दो कारणों के बारे में सोच सकता हूं: ए) आप अपने इंडेंट्स का ट्रैक रखने के लिए लेखक का उपयोग कर सकते हैं, ताकि आपके आउटपुट एचटीएमएल को एक पंक्ति पर दिखाई देने के बजाय अच्छी तरह से स्वरूपित किया गया हो और बी) HtmlTextWriter आमतौर पर जुड़ा हुआ है आउटपुट स्ट्रीम के साथ, इसलिए यह मेमोरी में एक लंबी स्ट्रिंग बनाने से अधिक कुशल होना चाहिए (इस पर निर्भर करता है कि आप कितने एचटीएमएल उत्पन्न कर रहे हैं)।

इनमें से कोई भी असाधारण कारण नहीं है, लेकिन जब मुझे दक्षता की आवश्यकता होती है, तो मैं लेखक का उपयोग करने के लिए मुझे मनाने के लिए पर्याप्त हूं, या यदि मैं आधार नियंत्रण लिख रहा हूं जिसे पुन: उपयोग किया जाएगा और जितना संभव हो उतना पेशेवर होना चाहिए। आपकी माइलेज भिन्न हो सकती है :-)।

HtmlTextWriter साफ है और मार्क-अप अच्छी तरह से दांतेदार जब यह प्रदान की गई है है: क्योंकि

+0

हाय क्या आप कृपया मदद कर सकते हैं, मैं एक नई विंडो पर Outlook ईमेल टेम्पलेट पर HTmltextwriter आउटपुट प्रस्तुत करना चाहता हूं। जब मैंने HTML की कोशिश की टैग उचित रूप से <43><41><12><25> हैलो वर्ल्ड !!! ... follwing संख्या appear..please सुझाव नहीं चाहिए – clarifier

2

किसी बिंदु पर, आपको अभी भी क्लाइंट को प्रस्तुत करने के लिए इसे HtmlTextWriter में पास करने की आवश्यकता है। मुझे लगता है कि आपके पास अंतिम लेखक होगा। राइट (एसबी.ToString()); दूसरे उदाहरण में वहां। कोड की रेखाओं को कम करने के लिए आप क्या कर सकते हैं कच्चे एचटीएमएल लिख रहे हैं, ठीक उसी तरह जैसे आपके दूसरे स्ट्रिंगबिल्डर उदाहरण में, लेकिन इसके बजाय HtmlTextWriter.Write का उपयोग करना।

writer.Write("<table><tr><td>"); 
writer.Write(someTextVariable); 
writer.Write("</td></tr></table>"); 

फिर स्ट्रिंगबिल्डर का उपयोग करना अनावश्यक लगता है। और, HtmlTextWriter कम से कम कुछ हद तक, सुनिश्चित करें कि जेनरेट किया गया HTML अनुपालनशील है (हालांकि यह उपरोक्त मामले में सही नहीं है, कच्चे HTML लिखते समय)।

6

HtmlTextWriter फायदेमंद है।

एक प्रदर्शन प्रभाव है क्योंकि HtmlTextWriter सीधे आउटपुट स्ट्रीम पर लिखता है। स्ट्रिंगबिल्डर आउटपुट स्ट्रीम को तब तक नहीं लिखता जब तक ToString को कॉल नहीं किया जाता है।

यहां एक उदाहरण है कि आप HtmlTextWriter का उपयोग यहां Saving and Reusing HTML Output के लिए भी क्यों करेंगे।

+0

हाय, मैं एक नया पर Outlook ईमेल टेम्पलेट पर HTmltextwriter उत्पादन को रखना चाहते हैं window.when मैंने कोशिश की HTML टैग ठीक <43><41><12> प्रतिपादन नहीं कर रहे हैं <25> हैलो दुनिया !!! clarifier

11

एक अन्य लाभ यह हो सकता है कि HtmlTextWriter का उपयोग करके एक क्लीनर (अधिक रखरखाव अनुकूल) तरीके से कोड प्रारूपित कर सकता है, और HtmlTextWriter स्वचालित रूप से एन्कोडिंग HTML का समर्थन करता है। की तुलना करें:

writer.AddAttribute(HtmlTextWriterAttribute.Id, "someId"); 
if (!string.IsNullOrEmpty(cssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass); 
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Red"); 
writer.RenderBeginTag(HtmlTextWriterTag.Span); 
writer.WriteEncodedText(text); 
writer.RenderEndTag(); 

बनाम:

StringBuilder html = new StringBuilder(); 
html.Append("<span"); 
html.Append(" id=\"someId\""); 
if (!string.IsNullOrEmpty(cssClass)) html.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(cssClass)); 
html.Append(">"); 
html.Append(HttpUtility.HtmlEncode(text)); 
html.Append("</span>"); 

यह तर्क हो सकता है कि दूसरे उदाहरण में कोड एक अलग, संभवतः क्लीनर, रास्ते में लिखा जा सकता है, लेकिन इस HtmlTextWriter का एक लाभ के रूप में देखा जा सकता है क्योंकि यह मूल रूप से स्वरूपण के एक कैननिक तरीके को लागू करता है (जो रखरखाव में सुधार करता है)।

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