Vyhledávání na webu

c# - Smíchat Razor a Javascript kód


Jsem docela zmatený tím, jak kombinovat Razor a JS. Toto je aktuální funkce, u které jsem uvízl:

<script type="text/javascript">

        var data = [];

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

Kdybych mohl deklarovat C# kód s <c#></c#> a všechno ostatní bylo JS kód -- tohle by bylo to, co hledám:

<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#>

Jaký je nejlepší způsob, jak toho dosáhnout?

Odpověď č. 1

Použijte <text>:

<script type="text/javascript">

   var data = [];

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

Odpověď č. 2

Uvnitř kódového bloku (např. @foreach) je potřeba označit markup (nebo v tomto případě Javascript) pomocí @: nebo tagu <text>.

Uvnitř značkovacích kontextů je potřeba kód obklopit bloky kódu (@{ ... } nebo @if, ...)

Odpověď č. 3

můžete také jednoduše použít

<script type="text/javascript">

   var data = [];

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

poznámka @:

Odpověď č. 4

Nikdy nikdy nesmíš míchat více jazyků.

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

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

V případě problému můžete také zkusit

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

Související články