@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。有办法解决这个问题吗?
答案 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)
}
}