2011-04-10 10 views
125

मैं रेजर और जेएस को मिश्रण करने के तरीके से बहुत उलझन में हूं। यह वर्तमान समारोह मैं के साथ फंस रहा है: मैं <c#></c#> साथ सी # कोड की घोषणा कर सकता है और बाकी सब कुछ जे एस कोड था तोमिक्स रेजर और जावास्क्रिप्ट कोड

<script type="text/javascript"> 

     var data = []; 

     @foreach (var r in Model.rows) 
     { 
       data.push([ @r.UnixTime * 1000, @r.Value ]); 
     } 

- यह होगा कि मैं क्या कर रहा हूँ के बाद:

<script type="text/javascript"> 

     var data = []; 

     <c#>@foreach (var r in Model.rows) {</c#> 
       data.push([ <c#>@r.UnixTime</c#> * 1000, <c#>@r.Value</c#> ]); 
     <c#>}</c#> 

क्या है इसे प्राप्त करने के लिए सबसे अच्छी विधि?

+2

जाहिर वाक्य रचना हाइलाइटिंग अच्छा और मेरी '' टैग के साथ साथ ही उलझन में है :-P –

+1

आप इस दृश्य के HTML आउटपुट की जाँच की थी? यह कैसे दिखता है, और आप इसे कैसे अलग करना चाहते हैं? – sukru

+0

'सशर्त संकलन 'के बारे में एक त्रुटि को फेंकता है इसलिए मैं HTML नहीं देख सकता - इसलिए मेरा मानना ​​है कि इसका हिस्सा सी # कोड है। –

उत्तर

271

उपयोग <text>:

<script type="text/javascript"> 

    var data = []; 

    @foreach (var r in Model.rows) 
    { 
     <text> 
      data.push([ @r.UnixTime * 1000, @r.Value ]); 
     </text> 
    } 
</script> 
+20

रेजर निष्पादित होने पर जावास्क्रिप्ट ब्लॉक में ठीक काम करता है लेकिन मुझे नफरत है कि सिंटैक्स हाइलाइटिंग कैसे भ्रमित हो जाती है। यह सभी रेजर कोड को अमान्य सिंटेक्स के रूप में हाइलाइट करता है क्योंकि यह मुझे विश्वास है कि जावास्क्रिप्ट मोड में फंस गया है। – Chev

+2

क्या यह कोड बंडल में है या नहीं ?? क्या मैं जावास्क्रिप्ट फ़ाइल के अंदर कोड लिख सकता हूं ?? – ncubica

+2

पूरी तरह से काम करता है जब तक आप यह जांचना नहीं चाहते कि एक चर दूसरे से कम है और रेज़र मनोविज्ञान चला जाता है! – cbp

67

कोड ब्लॉक के अंदर (उदाहरण के लिए, @foreach), आपको मार्कअप (या, इस मामले में, जावास्क्रिप्ट) with @: or the <text> tag चिह्नित करने की आवश्यकता है।

मार्कअप संदर्भों के अंदर, आप कोड ब्लॉक के साथ कोड के चारों ओर की जरूरत है (@{ ... } या @if, ...)

+0

आप "मार्कअप को चिह्नित करें" क्यों कहते हैं, अगर सामग्री वास्तव में मार्कअप थी तो यह कोई मुद्दा नहीं होगा। –

+1

@ मैक्स: हालांकि यह मार्कअप की तरह दिखता नहीं है, यह मार्कअप है। (सर्वर-साइड कोड के विपरीत) – SLaks

42

आप भी बस का उपयोग कर सकते

<script type="text/javascript"> 

    var data = []; 

    @foreach (var r in Model.rows) 
    { 
     @:data.push([ @r.UnixTime * 1000, @r.Value ]); 
    } 
</script> 

नोट @:

-1

जे एस स्क्रिप्ट के अंदर @ {में अपने उस्तरा कोड लपेटें} जब और सिर्फ @ का उपयोग कर के बारे में पता होना कभी कभी यह काम नहीं करता है:

function hideSurveyReminder() { 
     @Session["_isSurveyPassed"] = true; 
    } 

यह

function hideSurveyReminder() { 
     False = true; 
    } 
ब्राउज़र में

का उत्पादन करेगा = (

8

कभी भी अधिक भाषाओं को मिश्रित न करें।

<script type="text/javascript"> 
    var data = @Json.Encode(Model); // !!!! export data !!!! 

    for(var prop in data){ 
     console.log(prop + " "+ data[prop]); 
    } 
+0

यह बहुत अच्छा है, लेकिन यह भी वैध उदाहरण हैं जहां हमें मिश्रण करने की आवश्यकता है। लेकिन यह वह समाधान है जिसका उपयोग मैंने पूरी तरह से फिट होने के बाद किया था। – frostymarvelous

+0

ध्यान दें कि यह _is_ मिश्रण भाषाएं। आपके पास एक बयान है जो अर्ध-जावास्क्रिप्ट ("var data =") और आधा रेजर/सी # ("@ जेसन। एन्कोड (मॉडल)") है। यह केवल एक कम आक्रामक मिश्रण है, लेकिन यह रेजर/सी # "फोरैच" होने से कम मिश्रण नहीं है जिसका शरीर जेनरेट जेनरेट करता है। :-) –

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