我正在使用umbraco 4.我想循环遍历节点并将其urlname存储在数组中。所以这个数组看起来像...... ['aaa-node','bbb-node','ccc-node']。但是下面的代码不起作用......
<script type="text/javascript">
@{
var arr = new Array[10];
var j=0;
foreach (var node in Model.Children.Where("Visible"))
{
arr[j]=@node.UrlName;
j++;
}
}
</script>
但是这会给Error加载Razor Script getnodes.cshtml 代码中的错误是什么?
答案 0 :(得分:1)
我猜你正在获得一个超出范围的索引异常,因为可能有超过10个节点。
我发现通过将它包装在try catch中然后输出错误来调试razor代码更容易。请注意,这实际上仅适用于运行时错误。
@try
{
// Initialize list:
var list = new List<string>();
// Add each urlname to the list:
foreach (var node in Model.Children.Where("Visible"))
{
list.Add(node.UrlName);
}
// Serialize and output javascript:
<script type="text/javascript">
var arr = @Html.Raw(Json.Encode(list));
</script>
}
catch (Exception ex)
{
@ex.ToString()
}
我知道,围绕一个人的想法很难。 Razor代码在服务器端进行评估,javascript在客户端进行评估。这意味着他们两个人没有真正的合作方式。
我们对脚本标记之间的代码行所做的是写出浏览器在下载渲染页面后将运行的javascript。就剃刀而言,它只是在那个位置写出一个字符串。即使部分语言看起来很相似,但剃刀对javascript一无所知。 Json.Encode(razor)将列表对象序列化为json。 Html.Raw(razor)确保输出不被编码。 (删除它并在浏览器中查看页面的来源,以了解为什么这是必要的。)