6

मैं अद्यतन पैनल और एएसपी ड्रॉप डाउन का उपयोग कर रहा हूं। जब मैं ड्रॉप डाउन सूची से कोई भी मान चुनता हूं तो मैं डेटाबेस से कुछ डेटा लोड करता हूं जो इस चयनित मान पर निर्भर करता है। हालांकि, जब भी यह चयन बदलता है पृष्ठ को रीफ्रेश किया जाएगा। मैं इस पेज को रीफ्रेश से कैसे बचा सकता हूं? मैंने AsyncPostBackTrigger भी कोशिश की है लेकिन फिर भी यह समस्या होती है।ड्रॉपडाउन सूची के चयनित इंडेक्स के बाद पेज रीफ्रेश से कैसे बचें?

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="false"> 
    </asp:ToolkitScriptManager> 
     <asp:UpdatePanel ID="OuterUpdatePanel" runat="server"> 
      <ContentTemplate> 
       <asp:DropDownList ID="ddList" CssClass="dropdown" Style="width: 200px !important;" 
       runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddList_SelectedIndexChanged"> 
       </asp:DropDownList> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

उत्तर

5

इस जोड़े, अगर आप पृष्ठ को रीफ्रेश बिना अजाक्स कॉल को गति प्रदान करने dropdownlist चाहते हैं और AutoPostBack="true"

<Triggers> 
<asp:AsyncPostBackTrigger ControlID="ddList" EventName="SelectedIndexChanged" /> 
</Triggers> 
+1

मैंने इसे और एएसपी: पोस्टबैक ट्रिगर के साथ भी जांच लिया है ... लेकिन समस्या अभी भी –

+0

है क्या आप सामग्री टेम्पलेट के नीचे ट्रिगर्स जोड़ रहे हैं? और दूसरी बात सामग्री टेम्पलेट के नीचे ऑटोपोस्टबैक = "सत्य" –

+0

हां नहीं हटाएं और अन्य सभी नियंत्रण सामग्री टेम्पलेट में हैं। –

5

अपने प्रश्न की जड़ को दूर नहीं करते हैं, मुझे विश्वास है, है:

"जब मैं ड्रॉप डाउन से कोई भी मान चुनता हूं तो मैं डेटाबेस से कुछ डेटा लोड करता हूं जो इस चयनित मूल्य पर निर्भर करता है, जब भी चयन परिवर्तन पृष्ठ को रीफ्रेश किया जाएगा तो मुझे समस्या का सामना करना पड़ रहा है।"

इसे पूरा करने के कई तरीके हैं, लेकिन इसके लिए वांछित प्रभाव उत्पन्न करने के लिए कुछ पुनर्गठन की आवश्यकता हो सकती है। यह करने के लिए एक अपेक्षाकृत सरल तरीका होगा:

(1) के रूप में निम्नानुसार अपने पृष्ठ को पुनर्संगठित करें:

<asp:DropDownList ID="ddList" CssClass="dropdown" Style="width: 200px !important;" runat="server" AutoPostBack="false"> 
</asp:DropDownList> 

<asp:UpdatePanel ID="OuterUpdatePanel" runat="server"> 
     <ContentTemplate> 
     <!-- Content goes here --> 
     </ContentTemplate> 
</asp:UpdatePanel> 

(2) स्क्रिप्ट जोड़ें इस प्रकार है:

<script type="text/javascript"> 
function handleDDLChange() { 
    __doPostBack($('div[id$="OuterUpdatePanel"]').attr('id'), 'ddlList_Changed_Or_Anything_Else_You_Might_Want_To_Key_Off_Of'); 
} 

$('input[id$="ddlList"]').change(handleDDLChange); 
</script> 

यह एक अधिक है " पुराना स्कूल "दृष्टिकोण, लेकिन यह आपके मुद्दे को हल करना चाहिए।

संपादित करें: निम्नलिखित एक "गैर jQuery" दृष्टिकोण को दिखाता है, ऊपर विचार के साथ एक छोटे से अधिक बाहर fleshed:

ASCX:

<asp:ScriptManager runat="server" /> 

<asp:DropDownList ID="ddlList" runat="server" onchange="handleDDLChange()"> 
    <asp:ListItem Text="text1" /> 
    <asp:ListItem Text="text2" /> 
</asp:DropDownList> 

<script type="text/javascript"> 
    function handleDDLChange() { 
     __doPostBack("<%= ddlList.ClientID %>", "ddlList_Changed_Or_Anything_Else_You_Might_Want_To_Key_Off_Of"); 
    } 
</script> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Literal ID="litTest" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

कोड-पीछे:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     litTest.Text = "No postback"; 
    } 
    else if (Request["__EVENTARGUMENT"] == "ddlList_Changed_Or_Anything_Else_You_Might_Want_To_Key_Off_Of") 
    { 
     litTest.Text = string.Format("Dropdown changed: {0}", ddlList.Text); 
    } 
    else 
    { 
     litTest.Text = "Postback for some other reason... :("; 
    } 
} 
+1

jQuery के बिना कोई अन्य समाधान है? –

+0

मैंने अपने उत्तर में अधिक विशिष्ट कोड शामिल करने के लिए संशोधन किया है जो jQuery चयनकर्ताओं पर निर्भर नहीं है –

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