2010-04-02 4 views
5

मेरे पास एक सी #/एएसपी.नेट .aspx पृष्ठ है जो दो नियंत्रणों की घोषणा करता है जो प्रत्येक एक टैब की सामग्री का प्रतिनिधित्व करता है। मैं एक क्वेरी स्ट्रिंग तर्क चाहता हूं (उदा।,? टैब = 1) यह निर्धारित करने के लिए कि कौन से दो नियंत्रण सक्रिय हैं। मेरी समस्या यह है कि वे दोनों प्रारंभिक घटनाओं के माध्यम से जाते हैं और अपने बच्चों के नियंत्रण को पॉप्युलेट करते हैं, सीपीयू संसाधनों को बर्बाद करते हैं और प्रतिक्रिया समय धीमा करते हैं। क्या उन्हें किसी भी तरह से निष्क्रिय करना संभव है ताकि वे किसी भी प्रारंभिकरण से गुज़रें?मैं सी # वेब उपयोगकर्ता नियंत्रण कैसे घोषित करूं लेकिन इसे प्रारंभ करने से रोकूं?

मेरे .aspx पेज इस तरह दिखता है:

<% if (TabId == 0) 
    { %> 
<my:usercontroltabone id="ctrl1" runat="server" /> 
<% } 
    else if (TabId == 1) 
    { %> 
<my:usercontroltabtwo id="ctrl2" runat="server" /> 
<% } %> 

और वह हिस्सा ठीक काम करता है। मुझे लगता है कि <% का मतलब यह होगा कि नियंत्रण वास्तव में घोषित नहीं किया जाएगा और इसलिए प्रारंभ नहीं होगा, लेकिन ऐसा नहीं है ...

उत्तर

7

यदि इनलाइन/स्पेगेटी सर्वर साइड कोड मदद नहीं करता है, तो मैं केवल एक वैकल्पिक समाधान के बारे में सोच सकता हूं: मार्कअप में नियंत्रण घोषित करने से बचें। इसके बजाय, अपने Page_Init ईवेंट हैंडलर से पृष्ठ पर वास्तव में इच्छित नियंत्रण को लोड करें। Page.LoadControl() विधि इस के लिए इस्तेमाल किया जा सकता है:

void Page_Init(object sender, System.EventArgs e) 
{ 
    Control tab; 

    switch (TabId) 
    { 
     case 0: tab = LoadControl("usercontroltabone.ascx"); break; 
     case 1: tab = LoadControl("usercontroltabtwo.ascx"); break; 
     default: tab = LoadControl("defaulttab.ascx"); break; 
    } 

    somePlaceholder.Controls.Add(tab); 
} 
+0

मैं मानता हूं कि स्पेगेटी कोड को जाने की आवश्यकता है। चीजों को वस्तु-उन्मुख रखने के लिए तर्क को कोडबींड में रहना चाहिए। – Daniel

+0

इस तरह से अच्छा काम करता है, चेतावनी यह है कि यदि आप व्यूस्टेट पर निर्भर हैं। व्यूस्टेट गतिशील रूप से जोड़े गए नियंत्रणों पर स्वचालित रूप से लोड नहीं होता है। –

+0

@Chuck: अगर मेरी याददाश्त सही मायने में सेवा करती है (यह कुछ समय हो गया है क्योंकि मैंने वेब रूपों के साथ बहुत कुछ किया है) जो वास्तव में * कब * नियंत्रण लोड होने पर निर्भर करता है। मेरा मानना ​​है कि 'पेज_लोड' की बजाय 'पेज_इनिट' में लोड करना दृश्यमान मुद्दों को हल करता है (अधिकांश)। –

1

प्रारंभिक कोड को बाहर ले जाएं। लोड और इन अपनी खुद की कस्टम सार्वजनिक विधि, और उचित होने पर शुरुआतकर्ता को स्पष्ट रूप से कॉल करें।

0

codebehind में अपने तर्क को लागू करें।

नियंत्रण घोषित:

<my:usercontroltabtwo id="ctrl2" Visible="False" runat="server" /> 

और फिर दृश्यता सेट:

if(TabId == 0) 
{ 
ctrl1.Visible = true; 
} 
else if(TabId == 1) 
{ 

ctrl2.Visible = true; 
} 
+2

इससे मदद नहीं मिलेगी। – SLaks

+0

@Chuck: यह मूल रूप से मैं क्या कर रहा था, लेकिन ctrl1 और ctrl2 (और उनके सभी बाल नियंत्रण) सभी को स्टार्टअप ईवेंट मिलते हैं, जो मैं बचने की कोशिश कर रहा हूं। –

+0

स्लाक्स की टिप्पणी में जोड़ना: यह दृष्टिकोण केवल नियंत्रण को * प्रस्तुत नहीं करेगा, लेकिन यह अभी भी नियंत्रण पेड़ में लोड और आरंभ किया जाएगा। अनिवार्य रूप से, यह ओपी पहले से ही है। –

0

UserControl.dispose() विधि रोक usercontrol Page_Load ईवेंट को सक्रिय करने के लिए।

+0

यह मेरे लिए काम नहीं किया। मैं बस अपने पेज को उलझाना प्रतीत होता था। –

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

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