我使用的是umbraco4,我想循环遍历节点并将其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>但是这给出了加载剃刀脚本getnodes.cshtml的错误代码中的错误是什么?
发布于 2012-12-14 19:41:08
我猜你得到的是一个超出界限的索引异常,因为可能有超过10个节点。
我发现调试razor代码更容易,方法是将其包装在try catch中,然后输出错误。请注意,这实际上只适用于运行时错误。
@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在客户端评估。因此,这意味着他们两个人没有真正的合作方式。
我们对script标记之间的代码行所做的是写出将由浏览器在下载呈现的页面后运行的javascript。就razor而言,它只是在那个位置写出了一个字符串。尽管这两种语言的某些部分看起来很相似,但razor对javascript一无所知。Json.Encode (razor)将列表对象序列化为json。Html.Raw (剃刀)确保输出没有编码。(删除它并在浏览器中查看页面的源代码,以了解为什么需要这样做。)
https://stackoverflow.com/questions/13873818
复制相似问题