2011-07-12 15 views
16

मैं एक बहुत ही सरल ऑपरेशन, जहां मैं एक और HtmlGenericControl करने के लिए एक HtmlGenericControl जोड़ने की कोशिश की है:क्या आप HtmlGenericControl में बाल नियंत्रण जोड़ सकते हैं?

protected void Page_Load(object sender, EventArgs e) 
{ 

    HtmlGenericControl div = new HtmlGenericControl("div"); 
    HtmlGenericControl p = new HtmlGenericControl("p"); 

    div.Controls.Add(p);//exception occurs 
} 

एक अपवाद केवल डीबगर में फेंक दिया जाता है - स्वयं पृष्ठ renders के रूप में यद्यपि कुछ भी नहीं हुआ था। हालांकि कुछ निश्चित रूप से होता है, जैसा कि कोड के एक बड़े हिस्से में, नियंत्रण नहीं किया जा रहा है जैसा कि उन्हें करना चाहिए।

enter image description here

वास्तविक अपवाद है:

{InnerText = '((System.Web.UI.HtmlControls.HtmlContainerControl)(div)).InnerText' threw an exception of type 'System.Web.HttpException'} 

मैं नहीं समझ सकता क्यों यह हो रहा है, जैसा कि आप इस तरह से एक दूसरे के लिए नियंत्रण जोड़ने के लिए सक्षम होना चाहिए।

ध्यान दें कि पहले उत्तर से, मैं आईडी के साथ फिर से करने की कोशिश की लेकिन यह अभी भी काम नहीं करता:

enter image description here

मैं कुछ और अधिक जानकारी नहीं है। अभिभावक के रूप में एक प्लेसहोल्डर नियंत्रण का उपयोग करते समय, वहाँ कोई अपवाद नहीं है:

protected void Page_Init() 
{ 
    PlaceHolder ph = new PlaceHolder(); 
    HtmlGenericControl p = new HtmlGenericControl("p"); 

    ph.Controls.Add(p);//no problem 
} 

उत्तर

0

मैं गलत कर रहा हूँ, कृपया जॉन एडम्स द्वारा टिप्पणी देखें।

मुझे संदेह होगा कि नियंत्रण के साथ कुछ ऐसा करना है जो अभी तक आईडी सेट नहीं है। मैं गलत हो सकता हूं ... लेकिन यहां आईडी सेट करने का तरीका बताया गया है, अगर यह समस्या है।

HtmlGenericControl and id

+0

ने कोशिश की है लेकिन यह अभी भी – Petras

+1

अपवाद को अपवाद फेंकता है। आईडी का उपयोग केवल वस्तुओं के संदर्भ में बाहरी कोड के लिए किया जाता है। आंतरिक रूप से, प्रतिपादन प्रक्रिया बाल नियंत्रण में पुनरावृत्त होती है और आवश्यक होने पर आईडी स्वचालित रूप से असाइन की जाएगी। –

0

बस मेरे छोटे धारणा:

संरक्षित शून्य Page_Load (वस्तु प्रेषक, EventArgs e) {

HtmlGenericControl div = नए HtmlGenericControl ("div");
div.InnerText = "";

एचटीएमएल जेनरिक नियंत्रण पी = नया एचटीएमएल जेनरिक कंट्रोल ("पी");

div.Controls.Add (पी); // अपवाद तब होता है}

+0

नहीं, यह या तो नहीं है। – Petras

0

मैं सिर्फ एक छोटे से MSDN शोध किया। स्पष्ट रूप से आपको एक से अधिक HtmlContainerControl का उपयोग करने की अनुमति नहीं है।

अपवाद ---------- स्थिति

HttpException --- वहाँ एक से अधिक एचटीएमएल सर्वर नियंत्रण है।

हालांकि आप एक से अधिक HtmlContainerControl बना सकते हैं ... फिर भी इस मामले को देख रहे हैं।किसी भी तरह से, कोई अपवाद नहीं है जब कोड के इस टुकड़े को क्रियान्वित करने फेंक दिया जाएगा

try 
    { 
     HtmlGenericControl div = new HtmlGenericControl("div"); 
     div.ID = "div1"; 
     HtmlGenericControl p = new HtmlGenericControl("p"); 
     p.ID = "p1"; 
     div.Controls.Add(p); 
     div.InnerText = "sep"; 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.WriteLine(ex.Message); 
     System.Diagnostics.Debug.WriteLine(ex.StackTrace); 
    } 

शायद यह वी.एस. के लिए केवल एक डिबगर संदेश इस बारे में काफी यकीन नहीं है .. ... मैं करने जा रहा हूँ को पुन: संपादित मेरी बाद में जवाब देने के ..

0

आप इस

string text = div.InnerText; 

आप मिल जाएगा अगले अपवाद करने की कोशिश तो

आईडी 1 की आंतरिक सामग्री नहीं मिल सकता है क्योंकि सामग्री सचमुच नहीं है।

जो बताता है कि आप इस तरह से जेनरेट किए गए HTML को नहीं देख सकते हैं।

1

"केवल डीबगर में एक अपवाद फेंक दिया गया है - पृष्ठ स्वयं प्रस्तुत करता है जैसे कि कुछ भी नहीं हुआ था।"

यह ठीक है कि बाल नियंत्रण होने पर इनरटेक्स्ट काम नहीं करेगा; यह डिज़ाइन द्वारा है क्योंकि वह उस समय विभिन्न प्रदर्शन, जीवन चक्र और साइड प्रभावित कारणों के लिए नियंत्रण के पूरे पदानुक्रम को प्रस्तुत नहीं करना चाहता है।

"... कुछ निश्चित रूप से होता है, कोड के एक बड़े हिस्से में, नियंत्रणों को उनके रूप में प्रस्तुत नहीं किया जा रहा है।"

इसका क्या अर्थ है? कोड के "बड़े हिस्से" में गलत तरीके से प्रस्तुत करना क्या है? मेरा अनुमान है कि कहीं और समस्या है और यहां आपके प्रश्न में जो कुछ है, उससे संबंधित नहीं है।

तो मुझे लगता है कि आप ठीक हैं। अभिभावक नियंत्रण पर इनरटेक्स्ट में अपवाद को अनदेखा करें। आपको अपने कोड के "बड़े हिस्से" के साथ जो भी समस्या हो रही है, उसके बारे में एक नया प्रश्न पूछने की आवश्यकता है।

0

आप

एएसपी बना सकते हैं: पैनल और यह div बिल्कुल के रूप में प्रदान की गई और जोड़ने के सभी नियंत्रण आप चाहते हैं अंदर यह

या

div.InnerHtml + = p.InnerHtml

इस div

1

पर मुझे अपने प्रस्तुत एचटीएमएल को जोड़ देगा, मुझे लगता है कि इस त्रुटि से बचने के लिए एक आसान समाधान बच्चे HtmlGenericControl को प्रस्तुत करना हो सकता है एक स्ट्रिंग और फिर इनर एचटीएमएल विशेषता के अंदर माता-पिता को जोड़ना। कुछ इस तरह:

HtmlGenericControl parent = new HtmlGenericControl("div"); 
HtmlGenericControl child = new HtmlGenericControl("div"); 
StringWriter stringWriter = new StringWriter(); 
HtmlTextWriter twr = new HtmlTextWriter(stringWriter); 
child.RenderControl(twr); 
string rendered=stringWriter.ToString().Replace("\r","").Replace("\n","").Replace("\t",""); 
parent.InnerHtml = rendered; 
1

आप पहली बार एक पैनल का उपयोग करने की जरूरत है। तो आप बच्चे HtmlGenericControl और उसके बाद पैरेंट HtmlGenericControl बना सकते हैं और फिर आप पैनल में पैरेंट नियंत्रण जोड़ सकते हैं। उदाहरण के लिए:

<asp:Panel ID="panel" runat="server" ></asp:Panel> 

//parent 
HtmlGenericControl div = new HtmlGenericControl("div"); 

//child 
HtmlGenericControl p = new HtmlGenericControl("p");  

// adding child control to parent control. 
div.Controls.Add(p); 

div.Visible = true; 

//adding parent control to panel 
panel.Controls.Add(div); 
संबंधित मुद्दे