2010-07-27 19 views
6

एएसपी.Net में मेरे पास कुछ कस्टम नियंत्रण हैं I मैंने jQuery का उपयोग किया जहां यह भी मदद की। खैर, अब एक समस्या है (स्पष्ट, लेकिन "खराब" वर्कअराउंड्स के साथ) यह है कि प्रत्येक उपयोगकर्ता नियंत्रण के लिए मुझे pageLoad ($(document).ready अपडेट पैनलों के साथ काम नहीं करेगा) के भीतर से कुछ कोड निष्पादित करने की आवश्यकता है।कस्टम नियंत्रण में जावास्क्रिप्ट को संभालने का सबसे अच्छा तरीका?

ठीक है तो अब मेरी समस्या है। मुझे pageLoad ईवेंट से दो कस्टम नियंत्रण संलग्न करने की आवश्यकता है।

ऐसा करने का सबसे अच्छा तरीका क्या होगा?

मैं सिर्फ

old_pageLoad=pageLoad 
pageLoad=function(){... old_pageLoad();} 

ऐसा नहीं कर सकते, क्योंकि इन कस्टम नियंत्रण एक पृष्ठ पर एक से अधिक बार इस्तेमाल किया जा सकता और स्क्रिप्ट नियंत्रण के हर एक उदाहरण के लिए चलाने के लिए की जरूरत है, के साथ साथ क्या हुआ अगर मैं 3 था पृष्ठ पर विभिन्न कस्टम नियंत्रण?

old_pageLoad_<%= MyStaticClass.GetUniqueID() %>=pageLoad; 
pageLoad=function(){... old_pageLoad_<%= MyStaticClass.GetUniqueID() %>();} 

वहाँ इस तरह समारोह संघर्ष से निपटने में किसी भी बेहतर तरीके हैं:

एकमात्र तरीका मैं ले कर आए हैं कुछ इस तरह जो सुपर hackish लगता है?

मैंने this MSDN article भी देखा है, लेकिन यह जो सुझाव देता है वह मेरे लिए वर्तमान में जो भी कर रहा है उससे भी बदतर लगता है।

उत्तर

1

ScriptManager की RegisterStartupScript विधि का उपयोग करें। स्क्रिप्ट पंजीकृत करते समय आप अपने नियंत्रण के संदर्भ में पास करते हैं, और यह सुनिश्चित करता है कि जब भी नियंत्रण अपडेट हो जाए तो प्रारंभिक स्क्रिप्ट चलती है (या तो पहले पृष्ठ लोड पर, या जब कोई अपडेटपैन अपडेट किया जाता है)।

+0

हां लेकिन फिर मैं तार के रूप में मेरी जावास्क्रिप्ट (codebehind में) के इलाज के लिए जो कोई वाक्य रचना हाइलाइटिंग का मतलब है और आप या तो स्ट्रिंग concat या सम्मिलित करने के लिए सर्वर साइड सामान – Earlz

+0

@Earlz स्ट्रिंग प्रतिस्थापन का सहारा करने के लिए है: यह यही कारण है कि आप अपने कोड का एक बड़ा .js फ़ाइल में डालते हैं और केवल रजिस्टरस्टार्टअपस्ट्रिंग के लिए स्क्रिप्ट में एक साधारण फ़ंक्शन कॉल (संभवतः नियंत्रण-विशिष्ट तर्क के साथ) डालते हैं। मैं तर्क स्ट्रिंग बनाने के लिए एक कस्टम जेएस लेखक का उपयोग करता हूं इसलिए मुझे भागने और क्या नहीं होने की चिंता करने की ज़रूरत नहीं है। –

+0

मैं इसे पहले से करने की कोशिश करता हूं लेकिन जब मुझे 10 अलग-अलग चीजों के मूल्य को पढ़ने की आवश्यकता होती है, तो फ़ंक्शन के लिए 10 तर्क थोड़ा लंबा होता है। – Earlz

0

एक और तरीका एक हैंडलर जोड़ना होगा जो एक एसिंक पोस्टबैक समाप्त होने पर जावास्क्रिप्ट विधि को कॉल करता है। मैंने कई बार jQuery संवादों को फिर से शुरू करने के लिए ऐसा किया है। जैसे

$().ready(function() { 
    myInitMethod(); 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myInitMethod); 
}); 

function myInitMethod() } 
    // Init code 
} 
संबंधित मुद्दे

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