2009-08-10 12 views
8

में DropDownList मुझे कोई समस्या है।UpdatePanel

मेरी प्रोजेक्ट में मैंने एक अपडेट पैनेल में ड्रॉपडाउनलिस्ट डाली है। जो मैं करना चाहता था वह ड्रॉपडाउन सूची से मूल्य का चयन करना और सत्र में इसका उपयोग करना है।

लेकिन जो भी मैं करता हूं, वह हमेशा मुझे "ऑटोपोस्टबैक सक्षम करें" की जांच न करने के कारण मुझे शून्य मान देगा। और जब मैं ऐसा करता हूं, तो यह पृष्ठ को रीफ्रेश करेगा, इसलिए यह वही नहीं है जो मैं चाहता था।

मैं इस समस्या को कैसे हल कर सकता हूं?

किसी भी विचार ...

उत्तर

19

ऐसा लगता है कि आप UpdatePanel सुविधा का सही उपयोग नहीं कर रहे हैं। यदि आपके पास ईवेंट फ़ायरफ़ॉक्स सेट होने पर अद्यतन अपडेट करने के लिए सेट किया गया है, तो केवल अपडेटपैनल को ताज़ा करना चाहिए, न कि पूरे पृष्ठ पर। नीचे दिया गया कोड आप जो चाहते हैं उसके समान व्यवहार करता प्रतीत होता है। ड्रॉप डाउन को बदलते समय, केवल अपडेट पैनल सर्वर पर वापस पोस्ट करता है और जब आप पृष्ठ को रीफ्रेश करते हैं, तो आप सत्र से मूल्य प्राप्त कर सकते हैं।

ASPX कोड

<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <div> 
     Current Time: <asp:Label ID="lblTime" runat="server" /><br /> 
     Session Value: <asp:Label ID="lblSessionValue" runat="server" /><br /> 
     <br /> 
     <asp:UpdatePanel ID="upSetSession" runat="server"> 
      <ContentTemplate> 
       <asp:DropDownList ID="ddlMyList" runat="server" 
        onselectedindexchanged="ddlMyList_SelectedIndexChanged" 
        AutoPostBack="true"> 
        <asp:ListItem>Select One</asp:ListItem> 
        <asp:ListItem>Maybe</asp:ListItem> 
        <asp:ListItem>Yes</asp:ListItem> 
       </asp:DropDownList> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="ddlMyList" 
        EventName="SelectedIndexChanged" /> 
      </Triggers> 
     </asp:UpdatePanel> 
    </div> 
</form> 

कोड के पीछे

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.lblTime.Text = DateTime.Now.ToShortTimeString(); 
     if (Session["MyValue"] != null) 
      this.lblSessionValue.Text = Session["MyValue"].ToString(); 
    } 

    protected void ddlMyList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Session.Remove("MyValue"); 
     Session.Add("MyValue", this.ddlMyList.SelectedValue); 
    } 
+0

ओके अब मुझे यह पता चला कि यह कैसे हल किया जाए। मुझे लगता है कि मैंने गतिशील रूप से 7 एसीएक्स फाइलों को एक अपडेट पैनेल में बुलाया है। अगर मैं इफ (आईएसपोस्टबैक) का उपयोग करता हूं तो .... अंत यदि शायद मैं इसे बना सकता हूं काम – iersoy

+0

मैं आमतौर पर अगर (+ पोस्टपोस्टबैक) अपने पेज लोड और पेज इनिट फ़ंक्शंस के आसपास चेक करता हूं तो उनके पास कोई सामग्री है ... – RSolberg

+0

@RSolberg: आपने मेरा दिन बचाया !!! –

3

आदेश सत्र के लिए जमा हो जाती कुछ भी पाने के लिए, आप सर्वर पर प्रस्तुत करने के लिए किया है।

शायद आप कुछ और विवरण क्यों नहीं चाहते हैं कि आप अपडेटपैनल रीफ्रेशिंग सहायक क्यों होंगे, और आप सत्र में मूल्य का उपयोग करके क्या हासिल करने की कोशिश कर रहे हैं।

संपादित करें: आपकी टिप्पणियों के आधार पर, मुझे लगता है कि समाधान सत्र में वर्तमान .ascx फ़ाइल को संग्रहीत करना होगा, और अपने ड्रॉपडाउनलिस्ट को ऑटोपोस्टबैक सक्षम करने के लिए सेट करना होगा।

तो, "अगला" और "बैक" बटनों के संचालन पर, सत्र के लिए सही .ascx के लिए संकेतक संग्रहीत करें।

ड्रॉपडाउन सूची ईवेंट के आपके पोस्टबैक हैंडलिंग के दौरान, आप बस यह सुनिश्चित कर सकते हैं कि वर्तमान फ़ाइल को दिखाने के लिए सत्र की जांच करके वर्तमान .ascx फ़ाइल अभी भी दिखाया जा रहा है। जब परिणाम क्लाइंट को वापस कर दिया जाता है, तो कुछ भी नहीं बदलेगा, क्योंकि UpdatePanel यह समझने के लिए पर्याप्त स्मार्ट है कि यह वही सामग्री है, और आप ड्रॉपडाउनलिस्ट मान सफलतापूर्वक निपटाएंगे।

+0

की तरह एक जादूगर के लिए यू का शुक्र है structure.and इसकी बहुत actually.but मुझे यू बताना चाहूँगा जटिल है.मुझे 7 .ascx फ़ाइल है और मेरे default.aspx फ़ाइल में अगला और बैक बटन का उपयोग करके मेरे अपडेट पैनेल स्क्रिप्ट मैनेजर और UpdatePanel.in है। मैं इन .ascx फ़ाइलों को गतिशील रूप से कॉल करता हूं, इसलिए यह एक विज़ार्ड-जैसी दृश्य देता है। अगर मैं अपनी ड्रॉपडाउनलिस्ट को ऑटोपोस्टबैक करता हूं तो यह पेज 1.ascx नामक पहले वेबसर्क्रंट्रोल पर वापस जायेगा। यह मेरे लिए स्वीकार्य नहीं है। मैं समाधान खोजने की कोशिश कर रहा हूं लेकिन अभी तक – iersoy

+0

नहीं ढूंढ सकता और सत्र I का उपयोग करके अन्य .ascx फ़ाइलों में उपयोग करने के लिए वैश्विक चर को स्टोर करने की योजना बना रहा हूं। – iersoy

+0

मैंने आपके उत्तर को आपके लिए संभावित समाधान के साथ अपडेट किया। – womp

1

ऐसा लगता है कि आप यहां की तुलना में अधिक काम कर रहे हैं। क्या आपने एएसपी.NET विज़ार्ड नियंत्रण का उपयोग करने में देखा है? http://msdn.microsoft.com/en-us/magazine/cc163894.aspx या सिर्फ Google इसे।

आप अभी भी इसे अपने तरीके से करना चाहते हैं, तो आप सर्वर से प्रस्तुत करने के लिए है (या तो साथ कोई autopostback + मैनुअल बटन क्लिक सबमिट करते हैं, या autopostback को सक्षम करने से) सत्र के बाद से एक सर्वर साइड अवधारणा है। HTTP एक स्टेटलेस प्रोटोकॉल है, इसलिए राज्य की एकमात्र अवधारणा को HTTP के डोमेन के बाहर किया जाना है। इसका मतलब है कि आप सर्वर पर संग्रहीत स्थिति (उदाहरण के लिए, सत्र में) या क्लाइंट के कंप्यूटर (जैसे कुकी में) पर अधिक प्रतिबंधित रूप से संग्रहीत कर रहे हैं।

+0

धन्यवाद मैं इसे देख लूंगा। – iersoy

1

बहुत बहुत शुक्रिया मैं Page_Load घटना में चर को नियंत्रित करके समस्या हल हो।

If Label1.Text = 1 Then 
    Dim tempcontrol2 As Control = LoadControl("Page1.ascx") 
    PlaceHolder1.Controls.Add(tempcontrol2) 

ElseIf Label1.Text = 2 Then 
    Dim tempcontrol2 As Control = LoadControl("Page2.ascx") 
    PlaceHolder1.Controls.Add(tempcontrol2) 
End If 

सभी जवाब अच्छी तरह से मैं पैदा की है

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