समस्याWebForms: गतिशील (या पूर्ण) MasterPages
जब MasterPages साथ काम करने में स्क्रिप्ट टैग, एक आम जलन मैं में चलाने मास्टर में है कि स्क्रिप्ट टैग उपभोक्ता पृष्ठ के सापेक्ष हैं।
तो उदाहरण के लिए, यदि आपका उपभोक्ता पृष्ठ आपके ऐप की जड़ में है, तो आपकी जावास्क्रिप्ट काम कर सकती है, लेकिन जब आप एक उपफोल्डर में कोई अन्य पृष्ठ डालते हैं, तो सापेक्ष पथ टूट जाता है और जावास्क्रिप्ट नहीं मिलता है। और इस मामले में मुझे पता चलने वाले पूर्ण पथों का उपयोग करने का कोई तरीका नहीं है।
पिछली बार, मैंने वास्तव में इस पर हमला करने और एक अच्छा समाधान खोजने का फैसला किया।
प्रस्तावित समाधान
मैं एक रणनीति है कि Page_Load में ClientScriptManager.RegisterClientScriptInclude बुला इर्द-गिर्द घूमती करने की कोशिश की, लेकिन वह कुछ भी (दी, संबंधित पाइपलाइन की मेरी समझ अधूरा है) प्रस्तुत करने के लिए नहीं मालूम था।
मैं एक और एक है कि कुछ इस तरह देखा की कोशिश की:
<script language="javascript" src='<%= ResolveClientUrl("~/js/ddnmenu.js") %>' type="text/javascript"></script>
... लेकिन उस एक अपवाद फेंकता है: नियंत्रण संग्रह संशोधित नहीं किया जा सकता है, क्योंकि नियंत्रण कोड ब्लॉक शामिल हैं।
कार्य (लेकिन कुछ हद तक fugly) कोड
तो, क्या मैं के साथ जा रहा समाप्त हो गया है सिर में एक शाब्दिक नियंत्रण जहाँ मैं उचित एचटीएमएल प्रस्तुत करना:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.SetupLiteralScriptsTag()
End Sub
Private Sub SetupLiteralScriptsTag()
'Build the script tags to import our JavaScript
Dim Builder As New StringBuilder
Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/jquery-1.3.2.min.js")))
Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/jquery.corners.min.js")))
Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/bg.pos.js")))
Builder.AppendLine(String.Format("<script type=""text/javascript"" src=""{0}""""></script>", ResolveClientUrl("~/js/moonstone.js")))
Me.LiteralScriptTags.Text = Builder.ToString
End Sub
यह काम करता है, लेकिन मैं इसके बारे में आग नहीं लगा रहा क्योंकि यह एक बहुत ही आम समस्या के लिए एक बहुत अधिक कामकाज की तरह लगता है। क्या कोई बेहतर तरीका है?
के माध्यम से अपना रास्ता फंसे हुए कम से कम काम मास्टरपेज परिदृश्य में कम किया गया है। यह आश्चर्यजनक है कि मुझे नहीं पता था कि आप इसे इस तरह से कर सकते हैं ... मैं वेब ऐप्स पर बहुत लंबे समय से काम कर रहा हूं! –
मैंने इसे एम 4 एन के उत्तर के Iinstead को स्वीकार कर लिया क्योंकि यह सबसे आसान है। आप अपनी परियोजना के लिए किसी भी नई अवधारणा को पेश किए बिना इसका उपयोग कर सकते हैं ... हालांकि मैं अब इसके लिए ScriptManager का उपयोग करता हूं। –