नियंत्रण के चयनित मूल्य के बाद जावास्क्रिप्ट चलाना सेट कर दिया गया है

सरल एएसपी.नेट आवेदन।

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

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

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

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

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

क्या कोशिश करने के लिए कोई विचार?

0
ro fr bn

2 उत्तर

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



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



    <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>
        
        
        
            
                
        
        
    </div>
    </form>
    <script type="text/javascript">
        window.onload = function() {firstChanged();}
    </script>
</body>
</html>

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

0
जोड़ा

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

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

0
जोड़ा