18

स्पष्ट रूप से <%= %> निर्माण (रेंडर ब्लॉक) का उपयोग करके फ़ॉर्मेटेड आउटपुट लिखना संभव है एएसपी.नेट वेब फॉर्म पृष्ठों और विचारों में।यह एएसपी.NET सुविधा कहां है? <% = स्ट्रिंग प्रारूप, पैराम्स ऑब्जेक्ट [] args%>

<%= "{0} is {1}", "Foo", 42 %> 

यह "फू 42 है" प्रस्तुत करेगा। जहां तक ​​मुझे पता है कि एएसपी.नेट पार्सर <%= %> को HttpResponse.Write(string) पर कॉल में अनुवाद करता है। स्पष्ट रूप से उपर्युक्त कोड में, कोई भी एक-एक अनुवाद नहीं है, क्योंकि तर्कों की संख्या मेल नहीं खाती है (उपरोक्त अभिव्यक्ति में , तर्कों को अलग करता है)।

अब मैंने देखा है कि कक्षा TextWriter में Write(string, object[]) विधि है।

मैं पार्सर से उत्पादन जाँच कर ली है, और वास्तव में यह TextWriter की विधि है कि प्रारूपण के लिए एक params object[] तर्क स्वीकार करता है कहता है:

private void @__Renderform1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) { 
    // ... 
    @__w.Write("{0} is {1}", "Foo", 42); 

कि व्यवहार कहीं भी दस्तावेज है?

+7

+1। – Heinzi

+3

@ हिनजी पहली बार मैंने इसे देखा, मैंने सोचा कि यह एक बग होना चाहिए, क्योंकि रीशेर्पर ने इसे चेतावनी के साथ हाइलाइट किया "विधि" __ReSharper_Render 'में 1 पैरामीटर है लेकिन इसे 3 तर्क ("अभिव्यक्ति अपेक्षित" के साथ बुलाया गया है। –

+0

यह सिर्फ क्लासिक एम $ एफटी है।मैं अपने ढेर पर 13 साल तक आवेदन कर रहा हूं और इस तरह की चीजें हमेशा फसल लगती हैं। मुझे कहना है, ओपन-सोर्स समुदाय में, आप लगभग ऐसा कुछ नहीं देखते हैं जो कहीं भी दस्तावेज नहीं है। नेविगेट करना मुश्किल हो सकता है क्योंकि आप कभी नहीं जानते कि कौन सी लाइब्रेरी का उपयोग करना है, लेकिन उन्हें दस्तावेज किया गया है। –

उत्तर

3

जहाँ तक मुझे पता के रूप में ASP.NET पार्सर तब्दील <% =%> के लिए एक स्पष्टीकरण नहीं है पर एक कॉल HttpResponse.Write (स्ट्रिंग)।

शायद <%= "{0} is {1}", "Foo", 42 %>, http://www.hanselman.com/blog/ASPNETResponseWriteAndResponseOutputWriteKnowTheDifference.aspx

+0

मैंने पार्सर से आउटपुट के साथ अपना प्रश्न संपादित किया। यह सीधे 'HtmlTextWriter.Write (स्ट्रिंग प्रारूप, पैराम्स ऑब्जेक्ट [] args) में कॉल करता है। –

+0

@ मिचिलवोवो मैंने इसे भी देखा था। <%="Foo"%> समान रूप से परिवर्तित किया गया है, जबकि <% Response.Write ("Foo")%> को आधार में परिवर्तित कर दिया गया है। Repponse.Write ("Foo") मुझे लगता है कि @__w Response.Output है। मुझे जांचने का एक तरीका ढूंढना होगा ;-) – jbl

+0

मैंने जो किया वह रेंडर ब्लॉक के साथ एक सरल एएसपीएक्स पेज बना रहा था, वेब.कॉन्फिग में सत्य पर डीबग सेट करें, एएसपीएक्स पेज में कहीं संकलित त्रुटि का कारण बनता है, और उसके बाद अनुरोध करता है पृष्ठ। त्रुटि पृष्ठ पर संकलन स्रोत दिखाने का एक विकल्प है, जो आपको पार्सर जेनरेट कोड दिखाता है। –

3

यह एक <%= %>embedded code block है और क्लासिक एएसपी के साथ संगतता बनाए रखने के लिए मौजूद है के अनुसार प्रकार TextWriter की Output से किया जा रहा है, जो स्पष्टीकरण होगा Response.Output.Write(string format, params object[] arg) लिए अनुवाद किया है।

आपने देखा <%= "{0} is {1}", "Foo", 42 %> के बराबर है के रूप में:,

एक स्वरूपित स्ट्रिंग है कि उत्पादन धारा को कोई चीज सरणी के पाठ प्रतिनिधित्व शामिल है लिखता है:

string s = string.Format("{0} is {1}", "Foo", 42); 
Response.Write(s); 

यही व्यवहार here प्रलेखित है किसी लंबित टैब स्पेसिंग के साथ। यह विधि एक ही अर्थशास्त्र का उपयोग स्ट्रिंग.फॉर्मैट विधि के रूप में करती है। (ओवरराइड TextWriter.Write (स्ट्रिंग, [] वस्तु)।)

Here है जहां यह कोड प्रस्तुत कि ब्लॉक कॉल विधि लिखें दस्तावेज़ीकरण किया गया है।

अंत में, एम्बेडेड कोड ब्लॉक के लिए वाक्यविन्यास को here वर्णित .NET 4 के लिए अद्यतन किया गया है। मुझे कुछ नया सिखाने के लिए

+0

+1 सभी दस्तावेज़ लिंक के लिए +1 - लेकिन उनमें से कोई भी विशेष रूप से नहीं बताएं कि आप एक एम्बेडेड कोड ब्लॉक में ** अंतर्निहित ** वाक्यविन्यास का उपयोग कर सकते हैं। –

+1

+1 मैंने उद्धरण को दोबारा सुधार दिया है – xanatos

+0

आप किस प्रकार के सिंटैक्स के बारे में बात कर रहे हैं? String.Format तर्कों की एक चर संख्या लेता है। – dcaswell

संबंधित मुद्दे