2012-10-02 11 views
8

Ich habe eine Teilansicht, die einen Javascript-Funktionsaufruf zurückgibt, nachdem ich ein Ajax-Formular einreichen. Es benötigt eine Liste von Adressen und ruft Javascript-Funktionen zum Geocodieren und Platzieren von Markierungen auf einer Google Map auf. Wenn ich den folgenden Code kompiliere, erhalte ich die Fehlermeldung "Bedingte Kompilierung ist ausgeschaltet" um var in der ForEach-Zeile.ASP MVC Razor Foreach innerhalb Javascript Block

@model IEnumerable<TestStore.Models.Address> 

@if (Model.Count() > 0) 
{ 
<script type="text/javascript"> 
    deleteMarkers(); 

    @foreach(var item in Model) 
    { 
     codeAddress('@item.GetAddress'); 
    } 
</script> 
} 

ich hantieren mit dem Code und die folgende funktioniert ohne Fehler kompilieren:

@if (Model.Count() > 0) 
{ 
<script type="text/javascript"> 
    deleteMarkers(); 
</script> 

    foreach (var item in Model) 
    { 
     <script type="text/javascript"> 
      codeAddress('@item.GetAddress'); 
     </script> 
    } 
} 

Aus Gründen der Diskussion, wenn ich mehr Logik haben, dass viele Javascript-Funktion machen Anrufe innerhalb Schleifen, Ich würde viel lieber alles in 1 Skriptblock umgeben. Ich habe bei Stack Overflow gesucht und es scheint, dass die Razor-Syntax in einen Skriptblock passt, aber ich weiß nicht, wie das in meinem Beispiel aussieht.

Antwort

14

ist, weil das Javascript innerhalb Ihrer for-Schleife wie C# -Code zu Razor aussieht. Wickeln Sie es in <text>. Im Allgemeinen jeden Block Inhalt { /* this is block content */ } sollte immer einen einzelnen HTML-Knoten hat - oder, wenn Sie einen HTML-Knoten nicht brauchen (wie in Ihrem Fall) Sie <text>

@foreach(var item in Model) 
{ 
    <text>codeAddress('@item.GetAddress');</text> 
} 
27

verwenden oder können Sie die @: Syntax verwenden statt die <text> Element in Ihrer Schleife. Here ist ein Tutorial.

@:codeAddress(@item.GetAddress);