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

时间:2011-05-20 08:15:44

标签: 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"))

无法在递归帮助器中访问变量q。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:33)

@functions部分中定义变量。

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

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

关于此问题的更多阅读:SLaks Dissecting razor系列。

答案 1 :(得分:-1)

在Razor 3.2.3中,@functions中声明的变量似乎需要声明为static。似乎很不幸。如果有其他方法,请纠正我。

@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)
   }
}