2009-02-17 13 views
6

मैं जो करने का प्रयास कर रहा हूं वह एक वेबपेज बनाने के लिए है जिसमें टेक्स्टबॉक्स है जहां आप वेबपटल पर एक शाब्दिक (एच 2) का मान सेट कर सकते हैं और एक "सेव" बटन वापस पोस्ट कर सकते हैं और उसके बाद शाब्दिक रूप से सेट कर सकते हैं। यह एक विशाल चेतावनी के साथ काम करता है; जब पृष्ठ पोस्टबैक के बाद लोड होता है तो शाब्दिक नहीं बदला गया है। हालांकि अगर मैं वास्तव में शाब्दिक में सेट किया गया लॉग करता हूं तो इसका नया मान होता है। इसके अलावा यदि मैं पृष्ठ को फिर से लोड करता हूं (F5) यह सही तरीके से प्रदर्शित होता है।पोस्टबैक के साथ वेबपर्ट को उचित रूप से कार्यान्वित करें?

पहले मुझे लगा कि यह व्यूस्टेट होना चाहिए, इसलिए मैंने इसे सभी नियंत्रणों के लिए अक्षम कर दिया। मैंने सत्यापित किया कि इसे व्यूस्टेट में सहेजा नहीं जा रहा है (इसे डीकोड किया गया है)। तो व्यूस्टेट पुराने मूल्य को सहेज नहीं रहा है।

मैं वेबपैर पर अपने नियंत्रण जोड़ने के लिए "CreateChildControls" का उपयोग कर रहा हूं। और पोस्टबैक एक साधारण घटना हैंडलर द्वारा संभाला जाता है।

कोई विचार?

रिकॉर्ड के लिए, मैं MOSS 2007

+0

यह पता लगाना आसान होगा कि समस्या कहां है यदि आपने कुछ कोड दिखाया है। –

+0

सच है, केवल समस्या यह एक बड़ी कक्षा है .. लेकिन मैंने इसे अब तक कम या ज्यादा काम करने के तरीके के रूप में काम किया है। – noocyte

उत्तर

3

उपयोग कर रहा हूँ एक ASP.NET घटना के समय समस्या की तरह लगता है। पेज लोड इवेंट में EnsureChildControls() को कॉल करने का प्रयास करें। यह सुनिश्चित करता है कि आपकी CreateChildControls() विधि को कॉल किया गया है और पोस्ट बैक इवेंट को संभालने से पहले आपके नियंत्रण पृष्ठ में जोड़े गए हैं। यदि आपके नियंत्रण पहले प्रीरेंडर या रेंडर चरण में जोड़े गए हैं तो पोस्ट बैक डेटा लेने के लिए उनके लिए बहुत देर हो जाएगी। फिर आपको अगले पृष्ठ लोड से पहले परिवर्तन दिखाई नहीं देगा।

+0

CreateChildControls() के दौरान मेरे सभी नियंत्रण जोड़े गए हैं। और मैंने ऑनलोड लोड ओवरराइड में EnsureChildControls() को कॉल करने का प्रयास किया है, कोई किस्मत नहीं। – noocyte

0

आप हमेशा एक एजेक्स अपडेट पैनल का उपयोग कर सकते हैं, इसके अंदर अपना शाब्दिक नियंत्रण छोड़ सकते हैं और यूडीपी कॉल कर सकते हैं। अद्यतन पैनल पर अद्यतन करें। इसके प्रारंभिक उदाहरण के साथ जांच करें कि आपके शाब्दिक नियंत्रण पर आपके पास runat="server" है। आपको पेज_लोड ईवेंट में कोई परिवर्तन जोड़ने में सक्षम होना चाहिए और यह वेबपर्ट पर दिखाई देना चाहिए।

+0

हाँ, यह एक विकल्प हो सकता है, दुर्भाग्यवश यहां प्रश्न में मूल्य गतिशील है; अर्थात। टेक्स्टबॉक्स वेबपर्ट में मौजूद हो सकता है या नहीं हो सकता है ...;) – noocyte

+0

इसके अलावा; शाब्दिक कोड के माध्यम से जोड़ा जाता है (जैसा कि वेबपार्ट में सभी नियंत्रण हैं)। – noocyte

0

यहां एक सुझाव है। यह वैसे भी मेरे लिए काम करता है।

using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 

namespace Skaar.UI 
{ 
    public class PostBackWebPart:WebPart 
    { 
     private Literal literal; 
     private TextBox textBox; 
     protected override void OnInit(System.EventArgs e) 
     { 
      base.OnInit(e); 
      literal=new Literal(); 
      literal.Mode = LiteralMode.PassThrough;                                                                                                                                              
      Controls.Add(literal); 
      textBox=new TextBox(); 
      textBox.AutoPostBack = true; 
      Controls.Add(textBox); 
      textBox.TextChanged += textBox_TextChanged;                                                                                  
     } 

     void textBox_TextChanged(object sender, System.EventArgs e) 
     { 
      literal.Text = string.Format("<h1>{0}</h1>", textBox.Text); 
     } 
    } 
} 
संबंधित मुद्दे