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