Бритва: Почему моя переменная не входит в сферу действия
@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 можно получить в рекурсивном помощнике. Есть ли способ обойти это?
Ответы
Ответ 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)
}
}