2008-08-13 10 views
7

सरल एएसपी.NET एप्लिकेशन सेट किया गया है।नियंत्रण के चयनित मान के बाद जावास्क्रिप्ट चलाना

मेरे पास दो ड्रॉप-डाउन नियंत्रण हैं। पहले ड्रॉप डाउन पर मेरे पास जावास्क्रिप्ट onChange ईवेंट है। जावास्क्रिप्ट दूसरे ड्रॉप-डाउन को सक्षम करता है और इससे एक मान हटा देता है (पहले ड्रॉप-डाउन में चयनित मान)। यदि वे ड्रॉप-डाउन के रिक्त प्रथम मान पर क्लिक करते हैं, तो दूसरा ड्रॉप-डाउन अक्षम कर दिया जाएगा (और विकल्प रीसेट)।

मेरे पास OnPreRender विधि में कोड भी है जो पहले ड्रॉप-डाउन के मान के आधार पर दूसरे ड्रॉप-डाउन को सक्षम या अक्षम कर देगा। ऐसा इसलिए है कि पहले ड्रॉप-डाउन का मान कोड में चुना जा सकता है (उपयोगकर्ता सेटिंग्स लोड हो रहा है)।

मेरे समस्या है:

  1. उपयोगकर्ता पहले ड्रॉप-डाउन में कुछ का चयन करता है। दूसरा ड्रॉप-डाउन जावास्क्रिप्ट के माध्यम से सक्षम हो जाएगा।
  2. फिर वे एक तीसरे ड्रॉप-डाउन को बदलते हैं जो एक पोस्ट बैक शुरू करता है। पोस्ट के बाद ड्रॉप-डाउन सही स्थिति में हैं (पहला मान चयनित, दूसरा ड्रॉप-डाउन सक्षम)।
  3. यदि वे बैक बटन पर क्लिक करते हैं, तो दूसरा ड्रॉप-डाउन अब सक्षम नहीं होगा हालांकि यह पहले ड्रॉप-डाउन में कुछ चुना गया है।

मैं एक स्टार्टअप स्क्रिप्ट जोड़ने की कोशिश की है ClientScript.RegisterStartupScript के माध्यम से (है कि दूसरी ड्रॉप डाउन का सही राज्य स्थापित करेगा), लेकिन जब यह पहले ड्रॉप-डाउन कहा जाता हो जाता है 0 के selectedIndex, नहीं है यह क्या वास्तव में है। मेरा अनुमान है कि चयन की मान मेरी स्टार्ट स्क्रिप्ट के बाद सेट हो जाती है (लेकिन अभी भी onChange स्क्रिप्ट को कॉल नहीं करती है)।

क्या प्रयास करने के लिए कोई विचार है?

उत्तर

2
<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
    protected void indexChanged(object sender, EventArgs e) 
    { 
     Label1.Text = " I did something! "; 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Test Page</title> 
</head> 
<body> 
    <script type="text/javascript"> 
     function firstChanged() { 
      if(document.getElementById("firstSelect").selectedIndex != 0) 
       document.getElementById("secondSelect").disabled = false; 
      else 
       document.getElementById("secondSelect").disabled = true; 
     } 
    </script> 
    <form id="form1" runat="server"> 
    <div> 
     <select id="firstSelect" onchange="firstChanged()"> 
      <option value="0"></option> 
      <option value="1">One</option> 
      <option value="2">Two</option> 
      <option value="3">Three</option> 
     </select> 
     <select id="secondSelect" disabled="disabled"> 
      <option value="1">One</option> 
      <option value="2">Two</option> 
      <option value="3">Three</option> 
     </select> 
     <asp:DropDownList ID="DropDownList1" AutoPostBack="true" OnSelectedIndexChanged="indexChanged" runat="server"> 
      <asp:ListItem Text="One" Value="1"></asp:ListItem> 
      <asp:ListItem Text="Two" Value="2"></asp:ListItem>  
     </asp:DropDownList> 
     <asp:Label ID="Label1" runat="server"></asp:Label> 
    </div> 
    </form> 
    <script type="text/javascript"> 
     window.onload = function() {firstChanged();} 
    </script> 
</body> 
</html> 

संपादित करें: पूरे कोड को बदल दिया। यह आपके उपयोगकर्ता नियंत्रण में भी काम करना चाहिए। मेरा मानना ​​है कि रजिस्टर। क्लाइंटस्क्रिप्टब्लॉक काम नहीं कर रहा है क्योंकि उस ब्लॉक में जो कोड आप लिखते हैं उसे विंडो से पहले निष्पादित किया जाता है। ऑनलोड कहा जाता है। और, मुझे लगता है (मुझे इस बिंदु के बारे में निश्चित नहीं है) कि उस समय डोम ऑब्जेक्ट्स के मूल्य निर्धारित नहीं होते हैं। और, यही कारण है कि आप हमेशा इंडेक्स को हमेशा 0 के रूप में प्राप्त कर रहे हैं।

3

यदि दूसरा ड्रॉपडाउन प्रारंभ में जावास्क्रिप्ट के माध्यम से सक्षम है (मुझे लगता है कि यह जावास्क्रिप्ट के बदले में है, क्योंकि आपने निर्दिष्ट नहीं किया है), तो पिछली पोस्टबैक को पुनः लोड करने के लिए बैक बटन पर क्लिक करने से यह कभी सक्षम नहीं होगा।

क्लासिक जावास्क्रिप्ट के साथ एएसपी.NET मिक्सिंग बालों वाली हो सकती है। आप एएसपी.NET के अजाक्स कार्यान्वयन (या तीसरे पक्ष के अजाक्स पैनेल नियंत्रण को देखना चाहते हैं यदि आपको पुराने एएसपी.NET संस्करण का उपयोग करने के लिए मजबूर किया गया हो)। वे आपको वह व्यवहार देंगे जो आप शुद्ध सी # के माध्यम से चाहते हैं, बिना जावास्क्रिप्ट हैकरी-पोकर का सहारा लेना चाहते हैं।

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