2010-03-12 9 views
5

मेरे पास आंशिक दृश्य (UserControl) है जो मेरे Asp.Net MVC प्रोजेक्ट में एक साधारण पेजर लागू करता है। इस पेजर को एक .js फ़ाइल तक पहुंच की आवश्यकता है जिसे मूल पृष्ठ पर पेजर नियंत्रण के कितने उदाहरण मौजूद हैं, इस पर ध्यान दिए बिना, बिल्कुल एक बार शामिल करने की आवश्यकता है।आंशिक दृश्य प्रति बार एक बार बाहरी जावास्क्रिप्ट फ़ाइल कैसे शामिल कर सकता हूं?

मैंने Page.ClientScript.RegisterClientScriptInclude का उपयोग करने का प्रयास किया है, लेकिन इसका कोई प्रभाव नहीं पड़ा (मुझे लगता है कि कोड नगेट का मूल्यांकन सिर नियंत्रण को प्रभावित करने के लिए बहुत देर हो गया था)। क्या कोई आसान विकल्प है?

उत्तर

2

HttpContext.Current.Items में एक ध्वज सेट करें जब आप अपने आंशिक में स्क्रिप्ट भेज - यह एक शब्दकोश है कि पूरे अनुरोध के लिए lingers है। उदा .:

if (!HttpContext.Current.Items.Contains("SentTheScript")) 
{ 
    HttpContext.Current.Items["SentTheScript"] = true; 
    Response.Write(Html.ScriptTag("Script")); 
} 

इस तरह इसे एक बार में प्रस्तुत किया जाएगा।

+0

यह काम करना चाहिए, लेकिन यह स्क्रिप्ट टैग समाप्त होने पर अधिक नियंत्रण की अनुमति नहीं देता है। उदाहरण के लिए, उन्हें सिर में समूहित करना, या शरीर के नीचे समूहित करना संभव नहीं है। – AaronSieb

+0

यह प्रश्न को लिखित रूप में उत्तर देता है, इसलिए इसे स्वीकार किया जाता है। – AaronSieb

1

Page.ClientScript.RegisterClientScriptInclude पारंपरिक ASP.net के साथ प्रयोग किया जाता है।

चूंकि आप asp.net-mvc का उपयोग करते हैं, तो आपको scriptjs फ़ाइल को इस उपयोगकर्ता नियंत्रण का उपयोग करने वाले पृष्ठ पर निर्देश जोड़ने की आवश्यकता है।

चूंकि यह एक अच्छा अभ्यास सभी साइट के लिए केवल एक minified सीएसएस फ़ाइल के लिए है, तो आप शायद मुख्य CSS न्यूनतम फाइल में इस फाइल को शामिल करना चाहते हैं जाएगा।

+1

धन्यवाद, लेकिन इस पर नियंत्रण करना है एकाधिक पृष्ठों पर प्रयोग की जाने वाली है, और शायद एक बार इसके समाप्त होने पर एक से अधिक शामिल करना होगा। मुझे यह याद रखना पड़ेगा कि इसमें शामिल होने पर मुझे हर नियंत्रण के लिए आवश्यकता है। हालांकि, मुझे लगता है कि यदि कोई अन्य विकल्प नहीं है, तो मैं उन्हें एक मास्टर पेज में जोड़ सकता हूं ... – AaronSieb

+0

चूंकि आप साइट पर भाग में उपयोग करते हैं, तो आप इसे सभी साइट पर उपयोग कर सकते हैं और इसे क्लाइंट मशीन पर कैश कर सकते हैं। –

2

मास्टर पृष्ठ पर जोड़ें।

तो फिर तुम गारंटी ले सकते हैं कि यह केवल एक बार शामिल कर लिया जाएगा, और आप भूल नहीं होगा it.With आधुनिक कैशिंग, वहाँ वास्तव में हर पृष्ठ पर यह सहित पर कोई प्रदर्शन नुकसान है।

+1

यकीन नहीं है कि मुझे इस दृष्टिकोण को पसंद है, फिर भी यह हमेशा होता है कि नियंत्रण भी लोड नहीं होता है। आपको याद है, मेरे पास वास्तव में एक बेहतर समाधान नहीं है। – griegs

+0

मैंने सोचा नहीं था कि वास्तव में ऐसा कोई मुद्दा था, लेकिन मुझे सही होने में काफी खुशी है। –

+0

ऐसा लगता है कि यह किसी भी साझा निर्भरता के लिए जाने का मार्ग है। मुझे अभी भी यकीन नहीं है कि मैं मास्टर में सभी नियंत्रण-विशिष्ट जेएस चाहता हूं, हालांकि। – AaronSieb

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