रेजर और जावास्क्रिप्ट कोड मिलाएं


171

मैं बहुत उलझन में हूँ कि रेजर और js को कैसे मिलाया जाए। यह वर्तमान कार्य है जिसके साथ मैं फंसा हुआ हूं:

<script type="text/javascript">

        var data = [];

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

अगर मैं c # कोड के साथ <c#></c#>और बाकी सभी चीजों के लिए JS कोड घोषित कर सकता था - यह वही होगा जो मैं बाद में हूं:

<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
जाहिरा तौर पर वाक्य रचना हाइलाइटिंग मेरे <c#>टैग के साथ ही अच्छी और उलझन में है :-P
काइल ब्रांट

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

इस बारे में एक त्रुटि है Conditional Compilation कि मैं HTML नहीं देख पा रहा हूं - इसलिए मेरा मानना ​​है कि इसका हिस्सा C # कोड है।
काइल ब्रांट

1
यह एक जावास्क्रिप्ट त्रुटि की तरह लगता है: webdeveloper.com/forum/showthread.php?t=99780 । सटीक त्रुटि संदेश क्या है, और आप इसे कहां प्राप्त करते हैं?
सूक्रू

2
मुझे लगता है कि यह एक ऐसा मामला है जहां जेएस और सी # को मिलाने की कोशिश की जा रही है, यह पढ़ने / बनाए रखने के लिए एक दर्द होगा। मुझे खुशी है कि कंपाइलर ने आपको इस कोड से हटा दिया। :)
जिम बोला

जवाबों:


332

उपयोग करें <text>:

<script type="text/javascript">

   var data = [];

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

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

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

2
पूरी तरह से तब तक काम करता है जब तक आप जांचना चाहते हैं कि क्या एक चर दूसरे से कम है और रेजर साइको जाता है!
cbp

1
@ncubica यदि आप बंडल में रेजर चाहते हैं, तो आपकी अवधारणा में कुछ गलत तरीके से। रेजर विचारों के लिए है, जावास्क्रिप्ट नहीं।
100r

1
@ncubica यह पोस्ट पुरानी है, लेकिन आपके प्रश्न का हल है: JS फ़ाइल में कोई फ़ंक्शन लिखें, इसे प्रस्तुत Scripts.Renderकरें, फिर फ़ंक्शन को एक <script>टैग में कॉल करें । बिल्कुल सुंदर नहीं है, लेकिन यह अधिकांश के लिए काम करता है (पढ़ें: सरल) मामलों का उपयोग करें।
सिंजई

81

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

मार्कअप संदर्भों के अंदर, आपको कोड ब्लॉक ( @{ ... }या @if, ...) के साथ कोड को घेरना होगा


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

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

@:मैं क्या देख रहा था, महान!
मुफ्लिक्स 11


12

कभी भी और भाषाएं न मिलाएं।

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

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

समस्या के मामले में आप भी कोशिश कर सकते हैं

@Html.Raw(Json.Encode(Model));

यह बहुत अच्छा है, लेकिन इसके साथ ही, ऐसे वैध उदाहरण भी हैं जहाँ हमें मिश्रण करने की आवश्यकता है। लेकिन यह वह उपाय है जिसका मैंने उपयोग किया था क्योंकि यह पूरी तरह से फिट है।
१२:०ous पर ठंढाईदार जुलाव

3
ध्यान दें कि यह भाषाओं का मिश्रण है। आपके पास एक बयान है जो आधा-जावास्क्रिप्ट ("var data =") और आधा-रेजर / C # ("@ Json.Encode (मॉडल)") है। यह सिर्फ एक कम आक्रामक मिश्रण है, लेकिन यह रेजर / सी # "फॉरच" होने की तुलना में कोई कम मिश्रण नहीं है, जिसका शरीर जावास्क्रिप्ट उत्पन्न करता है। :-)
जोनाथन गिल्बर्ट

3
यह Uncaught SyntaxError: Unexpected token &इसलिए लौटता है क्योंकि मॉडल कुछ इस तरह बन जाता है[{&quot;Id&quot;:1,&quot;Name&quot;:&quot;Name}]
वीहुई गुओ

1

एक गैर पारंपरिक विधि जो जावास्क्रिप्ट को दृश्य से अलग करती है, लेकिन फिर भी इसमें रेजर का उपयोग किया जाता है, एक Scripts.cshtmlफाइल बनाने के लिए और अपनी मिश्रित जावास्क्रिप्ट / रेजर को वहां रखना है।

Index.cshtml

<div id="Result">
</div>

<button id="btnLoad">Click me</button>

@section scripts
{
    @Html.Partial("Scripts")
}

Scripts.cshtml

<script type="text/javascript">
    var url = "@Url.Action("Index", "Home")";

    $(document).ready(function() {
        $("#btnLoad").click(function() {
            $.ajax({
                type: "POST",
                url: url ,
                data: {someParameter: "some value"},
                contentType: "application/json; charset=utf-8",
                dataType: "json",

                success: function(msg) {
                    $("#Result").text(msg.d);
                }
            });
        });
    });
</script>

0

आप <text>जावास्क्रिप्ट के साथ दोनों cshtml कोड के लिए टैग का उपयोग कर सकते हैं


"<टेक्स्ट>" टैग उपरोक्त उत्तर याद कर रहा है
सुरेन्द्र कुमार लागीसेट्टी

इसे प्रारूपित करने के लिए कोड का चयन करने के बाद backticks या ctrl + k का उपयोग करें
सूरज राव

-1

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

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

इससे उत्पादन होगा

function hideSurveyReminder() {
       False = true;
    }

ब्राउज़र में = (

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.