Подтвердить что ты не робот

Бритва: Почему моя переменная не входит в сферу действия

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

Доступ к переменной qa можно получить в рекурсивном помощнике. Есть ли способ обойти это?

4b9b3361

Ответ 1

Определите переменную в разделе @functions.

Нормальный @{ помещает ваш код в тело метода. Используйте @functions для определения членов класса.

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

Больше прочтений по этому вопросу: Серия SLacks Dissectioning бритвы.

Ответ 2

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