2012-05-07 13 views
6

मेरे पास एक मास्टर पेज है और मेरे सभी पृष्ठ इसे विरासत में ले रहे हैं। स्वरूपण के लिए, मैंने सामग्री प्लेसहोल्डर में एक पृष्ठ से दूसरे में मौजूद सामग्री को रखने का विचार किया।सामग्री प्लेसहोल्डर में प्रोग्रामिक रूप से सामग्री कैसे जोड़ें?

अब, मैं इसमें सबकुछ कैसे डाल सकता हूं? चूंकि मैं डेटाबेस से सामान के साथ ContentPlaceHolder को पॉप्युलेट करने की योजना बना रहा हूं, मुझे लगता है कि मुझे इसे प्रोग्रामिक रूप से करना होगा।

  1. मैं ContentPlace धारक पर नियंत्रण कैसे जोड़ सकता हूं? मैंने अन्य answers चेक किया है, लेकिन मैं इसे अपने आईडी द्वारा एक्सेस नहीं कर सकता।

  2. क्या मुझे भिखारी से कई ContentPlaceHolders का उपयोग करना चाहिए? मान लें कि मैं फिल्में रखना चाहता हूं। क्या सभी छवियों और विवरणों और रेटिंग के साथ केवल एक ही होना चाहिए, प्रत्येक चीज़ के लिए अयस्क एक ContentPlaceHolder?

मुझे अन्य समाधानों के लिए खोला गया है, क्योंकि मुझे एएसपी के साथ कोई अनुभव नहीं है।

उत्तर

2

क्या सामान्य रूप से होता है

  1. आप उचित एचटीएमएल के साथ अपने मास्टर पेजेस की स्थापना की और ContentPlaceHolder रों
  2. आपको लगता है कि मास्टर पेज पर आधारित पेज बनाने के लिए है। यदि आप विजुअल स्टूडियो का उपयोग करते हैं, और मौजूदा मास्टर पेज के आधार पर एक नया पेज बनाने के लिए कहें, तो यह आपके लिए Content क्षेत्रों को जोड़ देगा।
  3. आप नए बनाए गए पृष्ठ में सामग्री क्षेत्रों में चीज़ें जोड़ते हैं।

यदि आप गतिशील रूप से मास्टर (या किसी भी) पृष्ठ पर नियंत्रण जोड़ना चाहते हैं, तो आप किसी मौजूदा नियंत्रण में नियंत्रण जोड़ सकते हैं। अगर इसे किसी भी तरह से लपेटा नहीं जाना चाहिए, तो बस Placeholder जोड़ें (यह एक एएसपीनेट नियंत्रण है)।

+0

मुझे खेद है, जो वास्तव में मेरी समस्या का समाधान नहीं करता है। मुझे उस सामग्री क्षेत्र में प्रोग्रामिंग के लिए कुछ कोड चाहिए, मान लें, कुछ टेक्स्ट, उस सामग्री क्षेत्र में, क्योंकि मैं इसे वेब पेज कोड कोड से एक्सेस नहीं कर सकता। मेरे पास default.aspx पृष्ठ और ContentPlaceHolder ID = content1 के साथ है। डिफ़ॉल्ट रूप से .aspx.cs मैं सामग्री 1 "देख नहीं सकता"। –

+0

मैं देखता हूं। क्या कोई कारण है कि आप अपने पृष्ठ के 'Content' क्षेत्र में प्लेसहोल्डर नहीं डाल सकते हैं? आप निश्चित रूप से उस चीज़ को जोड़ सकते हैं: – JayC

+0

उदाहरण के लिए: 'लेबल एलबीएल = नया लेबल(); lbl.Text = "कुछ"; placeHolder.Controls.Add (एलबीएल); ' – JayC

1

मैं इस

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<asp:Literal ID="jsstuff" runat="server"></asp:Literal> 
</asp:Content> 

पसंद आया और इस के पीछे कोड में चला गया:

string stuff = @"<script type=""text/javascript""> 
             var searchBox = 0; 
             var currentCountry = ''; 
             </script>"; 
        jsstuff.Text = stuff; 
10

पुराना सवाल ... लेकिन मैं सिर्फ इस मुद्दे में भाग गया और इस # 1 पोस्ट कि रखा था Google पर आ रहा है, तो आंकड़ा मैं अपना जवाब जोड़ूंगा क्योंकि अन्य मेरे मामले में काम नहीं करते थे।

यहाँ है जब एक नियमित रूप से <asp:Content कार्य नहीं करेगा कि कैसे मैं यह किया है (हालांकि सामान्य उपयोग में, इस सवाल का जवाब @JayC तुम कैसे करते है):

<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder> 
:

masterpage इस ContentPlaceHolder है

को उपयोगकर्ता नियंत्रण से गतिशील रूप से कुछ जावास्क्रिप्ट जोड़ना पड़ा। ContentPlaceHolder उपयोग करने के लिए कोशिश कर रहा है सीधे इस त्रुटि देता है:

Parser Error Message: Content controls have to be top-level controls in a content page or a nested master page that references a master page.

तो मैं से कोड-पीछे स्क्रिप्ट जोड़ना चाहते थे।यहाँ .ascx फ़ाइल के लिए पृष्ठ लोड है:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder; 
    if (c != null) 
    { 
     LiteralControl l = new LiteralControl(); 
     l.Text="<script type=\"text/javascript\">$(document).ready(function() {js stuff;});</script>"; 
     c.Controls.Add(l); 
    } 
} 

अद्यतन: तो यह पता चला है कि मैं और अधिक स्थानों में इस का उपयोग करने की तुलना में मैं उम्मीद थी, और एक तरीका है कि और अधिक लचीला/पठनीय था का उपयोग कर समाप्त हो गया । उपयोगकर्ता नियंत्रण में ही, मैंने बस जावास्क्रिप्ट और कुछ भी लपेट लिया जिसे नियमित div के साथ स्थानांतरित करने की आवश्यकता थी।

<div id="_jsDiv" runat="server"> 
    $(document).ready(function() { 
     //js stuff 
    }); 
    Other server controls or HTML junk 
</div> 

और फिर कोड के पीछे है कि div लगता है, और फिर इसे ContentPlaceHolder में आ जाएगा।

protected void Page_Load(object sender, EventArgs e) 
{ 
    ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder; 
    HtmlGenericCOntrol jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl; 
    if (c != null && jsDiv != null) 
    { 
     c.Controls.Add(jsDiv); 
    } 
} 

मैं वास्तव में एक कस्टम उपयोगकर्ता नियंत्रण में इस कोड को रखा, और मैं सिर्फ अपनी नियमित उपयोगकर्ता नियंत्रण, कस्टम उपयोगकर्ता नियंत्रण से विरासत इसलिए एक बार मैं एक <div id="_jsDiv" runat="server"> साथ जावास्क्रिप्ट/आदि लपेट है, कस्टम उपयोगकर्ता नियंत्रण लेता है बाकी की देखभाल और मुझे उपयोगकर्ता नियंत्रण के पीछे कोड में कुछ भी करने की ज़रूरत नहीं है।

+0

यह शानदार ढंग से काम करता है। प्लेसहोल्डर नाम के लिए नियंत्रण पैरामीटर को शामिल करने के लिए इसे बढ़ाया जा सकता है। मैंने इस समाधान का उपयोग किया जब मुझे किसी विशेष अनुक्रम/स्थिति में प्रोग्रामेटिक रूप से जावास्क्रिप्ट फ़ाइल रखने की आवश्यकता होती है, और शीर्षलेख में नहीं। – secretwep

0

यदि सामग्री पृष्ठ और मास्टर पेज के लिए नामस्थान समान नहीं है तो सामग्री पृष्ठ नियंत्रण सामग्री पृष्ठ में कोडबेंड में पहुंच योग्य नहीं है।

इसके अलावा, अपनी डिजाइनर फ़ाइलों की जांच करें। यदि नियंत्रण डिज़ाइनर फ़ाइल में सूचीबद्ध नहीं है, तो फ़ाइल को हटाएं और फिर से बनाएं (प्रोजेक्ट-> वेब एप्लिकेशन में कनवर्ट करें)

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