2010-04-19 11 views
7

मुझे कुछ सरल सवाल पूछने में कुछ मूर्खतापूर्ण लगता है, लेकिन मुझे कोई जवाब नहीं मिल रहा है। मैं एएसपी.नेट (सी #) के लिए नया हूं, लेकिन मैं एक वेब पेजों का एक सरल सेट बनाकर सीख रहा हूं जो एक रिपोर्ट प्रदर्शित करता है। मेरे पास एक चर है जो कंपनी के नाम का प्रतिनिधित्व करता है। मुझे इस चर को वेब पेज पर कई स्थानों पर आउटपुट करने की आवश्यकता है। एक ही रास्ता मैं उत्पादन के लिए एक चर इस पाया है के साथ है:एक एएसपी.नेट पर एक परिवर्तनीय एकाधिक टाइम्स का पुन: उपयोग करें पृष्ठ

company_name.Text = "Acme Windows"; 

तो

<asp:literal id="company_name" runat="server" /> 

मेरे समस्या यह है कि मैं पृष्ठ पर कई स्थानों में company_name का उपयोग करना चाहते है। क्या मुझे वास्तव में पृष्ठ पर रखे जाने के लिए एक ही वैल्यू को एक अलग वैरिएबल बनाना है? अगर मैं उपर्युक्त एक्सएमएल कोड को उन सभी स्थानों पर कॉपी करता हूं जो मैं चर दिखाना चाहता हूं तो यह स्पष्ट रूप से एक संकलन त्रुटि बनाता है क्योंकि उस आईडी को पहले ही परिभाषित किया गया है।

मुझे लगता है कि मुझे कुछ बहुत याद आ रही है।

// You can do this anywhere on your .aspx, as many times as you like. 
<%= this.CompanyName %> 

// Better yet, html encode the value to protect against various threats, 
// such as cross-site script injection (XSS) 
<%= HttpUtility.HtmlEncode(this.CompanyName) %> 

:

+0

यह वास्तव में काफी अच्छा सवाल है। –

उत्तर

11

यह करने के लिए सबसे आसान तरीका है एक स्ट्रिंग चर या अपने कोड-पीछे कक्षा में संपत्ति बना सकते हैं और अपने पृष्ठ इनलाइन पर प्रस्तुत करने के लिए <%= %> संकेतन (Response.Write का संक्षिप्त रूप) का प्रयोग है। नेट 4.0 एक नया शॉर्टकट संकेतन (Html Encoding Blocks) का परिचय अपने उत्पादन hTML-एन्कोड करने के लिए:

<%: this.CompanyName %> 

अपने मूल दृष्टिकोण के बारे में, के रूप में पी 12ET वेब नियंत्रण जैसे Literal किसी वेब पेज के अलग-अलग हिस्सों का प्रतिनिधित्व करते हैं - आप उन्हें पृष्ठ पर कई बार उपयोग नहीं कर सकते हैं क्योंकि ऑब्जेक्ट इंस्टेंस company_name आपके .aspx पृष्ठ में <asp:literal> द्वारा उत्पन्न HTML के विशिष्ट भाग को संदर्भित करता है।

+4

चेतावनी: यह आपको xss बग के लिए खोल देता है। एक लेबल नियंत्रण आउटपुट को स्वच्छ कर देगा। एएसपी.Net 4 (पिछले हफ्ते बाहर आया) में एक नया '<%: %> है मधुमक्खी स्टिंग आपको लगभग <%= %>' –

0

सबसे सरल जवाब आपको एकाधिक नियंत्रणों को परिभाषित करने की आवश्यकता है।

लेकिन एक बेहतर समाधान करने के लिए इस होगा:

चीजों की ओर पीछे कोड पर एक संपत्ति बनाएँ: संदर्भ चीजों की aspx पक्ष में

protected CompanyName{get;set;} 

फिर, उस साथ <% =%> आदेशों

<span><%=CompanyName %></span> 
+1

<% = के बजाय आपको हमेशा हमेशा उपयोग करना चाहिए, जो आप xss bugs पर खुलते हैं। यदि आप एएसपीनेट 4 का उपयोग कर सकते हैं, <%: बेहतर है। –

3

इस मामले में, आप पेज और उत्पादन में उस पर एक संपत्ति बनाने हर जगह आपको इसकी जरूरत है।

public string CompanyName { get { return "Acme Windows"; } } 

और aspx में:

.NET 4.0:

<%:this.CompanyName%> 

4 से पहले।0:

<%=this.companyName%> 
1

आप नियंत्रण गतिशील रूप से जोड़ सकते हैं:

Literal myLiteral = new Literal(); 
myLiteral.text = "Acme Windows"; 
this.Page.Controls.Add(myLiteral); 

तुम भी पृष्ठ पर किसी विशिष्ट नियंत्रण में नियंत्रण में जोड़ सकते हैं, विशेष रूप से नियंत्रित करने के लिए this.Page.Controls संदर्भ बदलकर आप शाब्दिक जोड़ना चाहते हैं।

0

यह एक समुदाय विकी क्यों है?

वैसे भी, आप जो चाहते हैं उसे प्राप्त करने के लिए आपके पास कई संभावनाएं हैं। एक ही नाम वाले एकाधिक चर रखने के लिए निश्चित रूप से सर्वोत्तम अभ्यास नहीं है। यदि आपने इसे भर दिया है, तो इसे "अर्द्ध गतिशील" मान कहते हैं, मैं इसे आपके कोड में हार्डकोड नहीं डालूंगा। मैं वैश्विक संसाधन फ़ाइल का उपयोग करना चाहता हूं।

आप App_GlobalResources फ़ोल्डर में एक नई संसाधन फ़ाइल बनाते हैं और "Acme Windows" मान के साथ एक "COMPANY_NAME" जोड़ते हैं। फिर अपने ASPX कोड के भीतर रखते मैं एक blog post some time ago जो इस दृष्टिकोण का विवरण लिखा है की तरह

<asp:literal id="company_name" runat="server" Text="<%$ Resources:GlobalResources, Button_Save %>"/> 

कुछ कर सकते हैं। संसाधन फ़ाइल का लाभ यह है कि आपको कोड को स्पर्श करने की आवश्यकता नहीं है।

यदि आप आगे "रिफैक्टर" करना चाहते हैं तो - मान लें कि आपके पास कुछ सामान्य कंपनी जानकारी है, आपको पृष्ठ पर अलग-अलग स्थितियों पर प्रदर्शित करना होगा - आप एक अलग उपयोगकर्ता नियंत्रण बना सकते हैं जिसमें कंपनी का नाम, फोन नंबर, संपर्क जैसी जानकारी शामिल हो जानकारी इत्यादि। उस नियंत्रण में आपके पास अपना शाब्दिक, लेबल है, जो भी आप उस जानकारी को वास्तव में 1 बार प्रदर्शित करने के लिए उपयोग करते हैं। यह UserControl तब वास्तविक पृष्ठ पर स्थानों पर रखा जाता है जहां आपको इसकी आवश्यकता होती है, यहां तक ​​कि कई बार भी।