Ich bin ziemlich verwirrt, wie man Rasiermesser und js mischt. Dies ist die aktuelle Funktion, an der ich festhalte:
<script type="text/javascript">
var data = [];
@foreach (var r in Model.rows)
{
data.push([ @r.UnixTime * 1000, @r.Value ]);
}
Wenn ich c # -Code mit deklarieren könnte <c#></c#>
und alles andere JS-Code wäre, wäre dies das, wonach ich suche:
<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#>
Was ist die beste Methode, um dies zu erreichen?
c#
javascript
razor
Kyle Brandt
quelle
quelle
<c#>
Tags verwechselt :-PConditional Compilation
sodass ich den HTML-Code nicht sehen kann. Ich glaube, es ist ein Teil davon, dass es sich um C # -Code handelt.Antworten:
Verwendung
<text>
:quelle
Scripts.Render
und rufen Sie die Funktion in einem<script>
Tag auf. Nicht gerade anmutig, aber es funktioniert für die meisten (sprich: einfachen) Anwendungsfälle.Innerhalb eines Codeblocks (z. B.
@foreach
) müssen Sie das Markup (oder in diesem Fall Javascript) mit@:
oder das<text>
Tag markieren .Innerhalb der Markup-Kontexte müssen Sie Code mit Codeblöcken umgeben (
@{ ... }
oder@if
, ...)quelle
@:
ist das, wonach ich gesucht habe, großartig!Sie können auch einfach verwenden
note @:
quelle
Mischen Sie niemals mehr Sprachen.
Im Falle eines Problems können Sie es auch versuchen
quelle
Uncaught SyntaxError: Unexpected token &
weil das Modell so etwas wird[{"Id":1,"Name":"Name}]
Eine nicht konventionelle Methode, um Javascript von der Ansicht zu trennen, aber dennoch Rasiermesser zu verwenden, besteht darin, eine
Scripts.cshtml
Datei zu erstellen und Ihr gemischtes Javascript / Rasiermesser dort abzulegen.Index.cshtml
Scripts.cshtml
quelle
Sie können das
<text>
Tag für beide cshtml-Codes mit Javascript verwendenquelle
Wickeln Sie Ihren Razor-Code in @ {} ein, wenn Sie sich im JS-Skript befinden, und achten Sie darauf, nur @ zu verwenden. Manchmal funktioniert es nicht:
Dies wird produzieren
im Browser = (
quelle