2009-06-25 13 views
13

में जावास्क्रिप्ट फ़ाइल के अंदर इनलाइन सी # का उपयोग करना मैं एमवीसी फ्रेमवर्क का उपयोग कर अपनी जावास्क्रिप्ट फ़ाइलों में काम करने के लिए इनलाइन सी # प्राप्त करने की कोशिश कर रहा हूं। मैंने यह छोटा टेस्ट कोड बनाया है।एमवीसी फ्रेमवर्क

$(document).ready(function() { 
    alert(<%= ViewData["Message"] %>); 
}); 

जब यह कोड दृश्य के अंदर उपयोग किया जाता है तो यह पूरी तरह से काम करता है। जब मैं अपने एएसपीएक्स व्यू के बाहर जाता हूं और जावास्क्रिप्ट फ़ाइल में इसे आज़माता हूं तो मुझे अवैध एक्सएमएल चरित्र मिलता है। मुझे लगता है कि यह एमवीसी फ्रेमवर्क में डिज़ाइन द्वारा है लेकिन मैं वेब पर इस पर कोई सामग्री नहीं ढूंढ पा रहा हूं।

किसी MVC फ्रेमवर्क का प्रयोग करके JavaScript फ़ाइलों में काम करने के लिए मिल गया है इनलाइन सी #?

उत्तर

14

के रूप में अन्य लोगों ने कहा, सी # सर्वर द्वारा संसाधित नहीं किया जा रहा है।

एक संभावित समाधान एक अलग मॉडल होना चाहिए जो एक ही मॉडल का उपयोग करता है और जावास्क्रिप्ट को आउटपुट करता है, फिर संदर्भ <script type="text/javascript" src="yourJSview.aspx"></script> में देखें।

जोड़ा गया के रूप में SLaks' answer प्रति:

text/javascript लिए सामग्री प्रकार निर्धारित करें, और (एक <script> टैग के बिना) अपने जावास्क्रिप्ट स्रोत <%@ Page निर्देश नीचे सीधे डाल दिया।

सावधान रहें कि आपको वीएस में इसके लिए कोई इंटेलिसेन्स नहीं मिलेगा।

+2

शानदार समाधान –

+1

मुझे लगता है कि लापता इंटेलिजेंस समस्या को हल करना संभव हो सकता है, http://stackoverflow.com/questions/1045451/using-inline-c-inside-javascript-file-in-mvc-framework/3268088#3268088 – 7wp

3

समझने के लिए सर्वर द्वारा इनलाइन सी # को संसाधित किया जाना है। स्वाभाविक रूप से, यह एक साधारण-सादा-जावास्क्रिप्ट फ़ाइल के साथ काम नहीं करेगा।

+0

मैं के रूप में ज्यादा लगा लेकिन वहाँ उम्मीद थी वहाँ कुछ हो सकता है। मैं अपना एचटीएमएल सहायक वर्ग प्राप्त करने की कोशिश कर रहा हूं जो मुझे जावास्क्रिप्ट फ़ाइलों में काम करने के लिए अच्छा पूर्ण लिंक देता है। ओह ठीक है –

1

आप एक अलग फ़ाइल में सी # कोड है और अपने दृश्य में शामिल सर्वर कोड को संसाधित नहीं है, स्क्रिप्ट फ़ाइल ब्राउज़र और इनलाइन स्क्रिप्ट द्वारा बुलाया जाएगा सादे स्ट्रिंग के रूप में माना जाएगा जब

वैकल्पिक रूप से आप जब आप स्क्रिप्ट फ़ाइल सहित, लेकिन मैं इस

4

.aspx फ़ाइलों के प्रभाव के बारे में निश्चित MVC ढांचे को देखते फ़ाइलें हैं नहीं कर रहा हूँ स्क्रिप्ट runat = सर्वर की कोशिश कर सकते हैं। ढांचा केवल विचारों और आंशिक विचार प्रस्तुत करता है। मुझे नहीं लगता कि जावास्क्रिप्ट फ़ाइलों के अंदर सर्वर-साइड कोड का उपयोग करने का एक तरीका मौजूद होगा।

आप एक छिपी हुई फ़ील्ड

<%-- This goes into a view in an .aspx --%> 
<%= Html.Hidden("MyMessage", ViewData["Message"]) %> 

में अपना संदेश में शामिल हैं और प्रयोग है कि आपके जावास्क्रिप्ट फ़ाइल के अंदर कर सकते हैं:

// This is the js file 
$(document).ready(function() { 
    alert($("#MyMessage").attr("value")); 
}); 
+0

मुझे लगता है कि यह वास्तव में मैंने देखा सबसे अच्छा समाधान है। एक और विकल्प होगा कि एक यूआरएल हो जो मैं जा सकता हूं, उस संदेश या लिंक जानकारी को थूक दूंगा जो मैं ढूंढ रहा हूं। तब मैं इसे इच्छानुसार इस्तेमाल कर सकता था। –

+2

@Serhat: या और $ (दस्तावेज़) .ready (function() {चेतावनी (msg);}); जेएस फाइल में। दोनों अपने समाधान और मेरे सुझाव में एक महत्वपूर्ण बिंदु है, अगर "संदेश" उद्धरण चिह्न या नई पंक्ति वर्ण हो सकता है, विशेष देखभाल की उन अन्यथा आप अपने समाधान या मेरे सुझाव में जावास्क्रिप्ट चर काम में छिपे हुए इनपुट को तोड़ने का जोखिम से बचने के लिए लिया जाना चाहिए। –

2

आपका वेब सर्वर .js फ़ाइलों को संसाधित नहीं करता है, यह केवल क्लाइंट को ही सेवा देता है। यह .aspx या अन्य ASP.NET फ़ाइल प्रकारों के विपरीत है। क्लाइंट को सेवा देने से पहले इन फ़ाइलों को आपके सर्वर द्वारा व्याख्या किया जाता है।

4

आप एक एएसपीएक्स दृश्य बना सकते हैं जो जावास्क्रिप्ट को प्रस्तुत करता है।

text/javascript लिए सामग्री प्रकार निर्धारित करें, और (एक <script> टैग के बिना) अपने जावास्क्रिप्ट स्रोत सीधे<%@ Page निर्देश नीचे डाल दिया।

सावधान रहें कि आपको वीएस में इसके लिए कोई इंटेलिसेन्स नहीं मिलेगा।

+1

यह एक बढ़िया आइडिया है, लेकिन व्यवहार में क्यों किसी को भी, ऐसा करना चाहते हैं जब तक कि aspx का मानना ​​है कि जावास्क्रिप्ट शामिल का परिणाम संचित किया जा सकता। क्योंकि यदि नहीं, तो यह केवल मुख्य पृष्ठ में स्क्रिप्ट कोड को एम्बेड करने जैसा ही है, जहां इसका उपयोग किया जाता है। क्या मै गलत हु? – 7wp

+1

@ रॉबर्टो: यदि यह एकाधिक पृष्ठों द्वारा उपयोग किया जाता है तो क्या होगा? – SLaks

+1

वैसे उस मामले में हाँ। पुन: उपयोग के लिए इसे हल करने का यह एक शानदार तरीका है। लेकिन मैं परंपरागत रूप से बाहरी जावास्क्रिप्ट फ़ाइलों को शामिल करने की क्षमता को दोहराने की लाइनों के साथ और सोच रहा था। – 7wp

0

मैं सेरहाट से सहमत हूं।एचटीएमएल छिपे हुए क्षेत्र को प्रस्तुत करना सबसे अच्छा है, या, जैसा कि अल उल्लिखित है, इसके लिए एक यूआरएल पर जाएं। यह एक वेब सेवा या यहां तक ​​कि एक IHttpHandler कार्यान्वयन के माध्यम से किया जा सकता है। फिर आप यूआरएल जैसे "message.axd? Id = 17" का उपयोग कर सकते हैं।

4

Wagner's answer और SLaks's answer ग्रांट को जोड़ने के लिए, आप वास्तव में दृश्य स्टूडियो मूर्ख कर सकते हैं ताकि तरह अपने समाधान में आप IntelliSense देने में: उनके समाधान में

<%if (false) {%><script type="text/javascript"><%} %> 
// your javascript here 
<%if (false) {%></script><%} %> 

यह आवश्यक है कि जब यह है कि वहाँ पृष्ठ पर renders <script> टैग नहीं हो, लेकिन इसका दुष्प्रभाव है जो विजुअल स्टूडियो में जावास्क्रिप्ट IntelliSense को बंद कर देता है। इसके बाद के संस्करण के साथ, विजुअल स्टूडियो आप IntelliSense दे देंगे, और जब मार डाला एक ही समय में <script> टैग प्रस्तुत करना नहीं।

2

यह एक पुरानी सवाल है, लेकिन जो लोग भविष्य में गूगल के माध्यम से में पर आते हैं, तो सबसे अच्छा समाधान डेटा- * चर में पारित करने के लिए विशेषताओं का उपयोग करने के लिए है। एक छिपा तत्व का उपयोग किया जा सकता है, लेकिन आप <script> टैग का भी उपयोग कर सकते हैं, और इसे एक अद्वितीय आईडी दे सकते हैं।

एक पूर्ण उदाहरण यहां उत्तर है: https://stackoverflow.com/a/18993844/1445356

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