2017-03-08 1 views
0

Also versuche ich einige Daten dynamisch an eine Javascript-Funktion zu übergeben, um einige UI für den Benutzer zu aktualisieren.ASP.NET MVC 5 - @ C# Code zur Laufzeit nicht übersetzt

@Html.CheckBox("Sun1D", new { onclick = "addRemEvent(1, 'D', 
        @((List<DateTime>)ViewBag.dates).ElementAt(0) , '#Sun1D');" 
        , htmlAttributes = new { @class = "form-control" } }) 

jedoch zur Laufzeit, der Code scheint nicht übersetzt werden und ich am Ende mit

<input htmlAttributes="{ class = form-control }" 
id="Sun1D" 
name="Sun1D" 
onclick="addRemEvent(1, &#39;D&#39;, 
@((List&lt;DateTime>)ViewBag.dates).ElementAt(0) , 
&#39;#Sun1D&#39;);" 
type="checkbox" value="true" /> 

Jetzt können Sie das Problem hier sehen. Es sollte ein Datumswert in diesem JavaScript-Funktionsaufruf sein, aber ich bekomme gerade meinen C# Code als ein Literal.

Antwort

3

Sie senden serverseitigen Code als Zeichenfolge an den Client. Es wird diese Zeichenfolge nicht ausführen, sondern sie nur an den Client senden.

zu, statt so etwas wie dies zu vereinfachen:

new { onclick="some text " + someCode + " more text" } 

In Ihnen, dass so etwas aussehen könnte:

new { onclick="some text @someCode more text" } 

Sie dies wünschen würde nichts

new { onclick = "addRemEvent(1, 'D', " + ((List<DateTime>)ViewBag.dates).ElementAt(0) + " , '#Sun1D');" } 

Es gibt Besonders an der Tatsache, dass es Razor-Syntax ist, Code ist immer noch Code. Sie schreiben C# -Code, um eine Zeichenfolge zu erstellen, die in die onclick-Eigenschaft eines Objekts eingefügt wird. Sie würden diese Zeichenfolge genau wie jede andere Zeichenfolge in C# erstellen. (Das heißt, Sie könnten auch string.Format() usw. verwenden, wenn Sie möchten.)

0
@Html.CheckBox("Sun1D", new { onclick = "addRemEvent(1, 'D',"+ 
        ((List<DateTime>)ViewBag.dates).ElementAt(0)+" , '#Sun1D');" 
        , htmlAttributes = new { @class = "form-control" } }) 
+1

Sie sollten eine Erklärung mit Ihrer Antwort, nicht nur ein Rohcode-Dump. – mason

+1

Es hat so oder so funktioniert, also danke. –

+0

@ Mason, einige Male, können einige kleinere Fehler ohne Erklärung bemerkt werden – levent