c# - Sekoita Razor- ja Javascript-koodia


Olen melko hämmentynyt siitä, miten yhdistää Razor ja JS. Tämä on nykyinen funktio, johon olen jumissa:

<script type="text/javascript">

        var data = [];

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

Jos voisin määritellä c#-koodin <c#></c#> ja kaikki muu olisi JS-koodia -- tämä olisi se, mitä haen:

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

Mikä on paras tapa saavuttaa tämä?

Vastaus #1

Käytä <text>:

<script type="text/javascript">

   var data = [];

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

Vastaus #2

Koodilohkon sisällä (esim. @foreach) sinun täytyy merkitä merkintäkieli (tai tässä tapauksessa Javascript) @:-merkinnällä tai <text>-tagilla.

Merkintäyhteyksissä sinun täytyy kietoa koodi koodilohkoihin (@{ ... } tai @if, ...).

Vastaus #3

voit myös yksinkertaisesti käyttää

<script type="text/javascript">

   var data = [];

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

huomaa @:

Vastaus #4

Älä koskaan sekoita useampaa kieltä.

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

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

Ongelman sattuessa voit myös yrittää

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

Aiheeseen liittyviä artikkeleita