剃刀:为什么我的变量不在范围内

Luk*_*101 20 c# razor

@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"))
Run Code Online (Sandbox Code Playgroud)

变量qa canot可以在递归帮助器中访问.有没有解决的办法?

GvS*_*GvS 35

在一个@functions部分中定义变量.

正常@{将您的代码放在某个方法体中.使用@functions定义类成员.

@functions{ List<string> qa = new List<string>(); } 
Run Code Online (Sandbox Code Playgroud)

更多关于此事的解读:SLaks解剖剃刀系列.