2011-05-20 5 views
19
@inherits umbraco.MacroEngines.DynamicNodeContext 
@using System.Collections; 

@{ List<string> qa = new List<string>(); } //this is not defined in the recursive helper below 

@helper traverseFirst(dynamic node){ 
    var items = node.Children.Where("umbracoNaviHide != true"); 
    foreach (var item in items) { 
    foreach(var subItem in item.Descendants()) { 
     if(subItem.Id == Model.Id) 
     { 
      qa.Add(); 
      break; 
     } 
    } 
    @traverseFirst(item) 
    } 
} 

@traverseFirst(@Model.AncestorOrSelf("Book")) 

La variable qa no se puede acceder en el auxiliar recursivo. ¿Hay alguna forma de evitar esto?Maquinilla de afeitar: ¿Por qué mi variable no está en el alcance

Respuesta

32

Defina la variable en una sección @functions.

La normal @{ coloca su código en el cuerpo de algún método. Use @functions para definir los miembros de la clase.

@functions{ List<string> qa = new List<string>(); } 

Más información sobre el tema: SLaks Dissecting razor series.

+0

Wow..gracias alot – Luke101

-1

En Razor 3.2.3 parece que la variable declarada en @functions debe declararse static. Parece desafortunado. Por favor corrígeme si hay una manera alternativa.

@functions 
{ 
    static List<string> qa = new List<string>(); 
} 

@helper traverseFirst(dynamic node) 
{ 
    var items = node.Children.Where("umbracoNaviHide != true"); 
    foreach (var item in items) { 
    foreach(var subItem in item.Descendants()) { 
     if(subItem.Id == Model.Id) 
     { 
      qa.Add(); 
      break; 
     } 
    } 
    @traverseFirst(item) 
    } 
} 
+0

No no no no no. ¡Esta es una idea terrible! Si dos personas acceden a su página al mismo tiempo, se sobrescribirá el valor; además, se quedará sentado y no se acumulará en la bolsa de basura (no hay problema). –

Cuestiones relacionadas