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));
