2012-10-02 141 views
8

Tengo una vista parcial que devuelve una llamada a la función Javascript después de enviar un formulario Ajax. Toma una lista de direcciones y llama a las funciones de Javascript para geocodificar y colocar marcadores en un mapa de Google. Cuando compilo el siguiente código, obtengo el error "La compilación condicional está desactivada" alrededor de var en la línea ForEach.ASP MVC Razor foreach dentro del bloque Javascript

@model IEnumerable<TestStore.Models.Address> 

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

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

I violín alrededor con el código y el siguiente no funcionará sin errores de compilación:

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

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

Por el bien de la discusión, si tengo la lógica ya que hacer un montón de función Javascript llama dentro de los bucles, Preferiría rodear todo dentro de 1 bloque de script. Busqué alrededor de Stack Overflow y parece que la sintaxis de Razor podría entrar dentro de un bloque de script, pero no sé cómo se verá en mi ejemplo.

Respuesta

14

es porque el javascript dentro de su bucle for se parece al código C# de Razor. Envuélvalo en <text>. En general, cualquier contenido del bloque { /* this is block content */ } siempre debe tener un solo nodo html - o si usted no necesita un nodo html (como en su caso) que puede utilizar <text>

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

o puede utilizar la sintaxis @: en lugar de la <text> elemento en tu ciclo. Here es un tutorial.

@:codeAddress(@item.GetAddress); 
Cuestiones relacionadas