Búsqueda de sitios web

c# - Mezclar código Razor y Javascript


Estoy bastante confundido sobre cómo mezclar Razor y JS. Esta es la función actual con la que estoy atascado:

<script type="text/javascript">

        var data = [];

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

Si pudiera declarar código C# con <c#></c#> y todo lo demás fuera código JS, esto sería lo que busco:

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

¿Cuál es el mejor método para lograr esto?

Respuesta #1

Usa <text>:

<script type="text/javascript">

   var data = [];

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

Respuesta #2

Dentro de un bloque de código (por ejemplo, @foreach), necesitas marcar el marcado (o, en este caso, Javascript) con @: o la etiqueta <text>.

Dentro de los contextos de marcado, necesitas rodear el código con bloques de código (@{ ... } o @if, ...)

Respuesta #3

también puedes simplemente usar

<script type="text/javascript">

   var data = [];

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

nota @:

Respuesta #4

Nunca, jamás mezcles más idiomas.

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

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

En caso de problema, también puedes intentar

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

Artículos relacionados