0

我正在使用 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 loading Razor Script getnodes.cshtml 代码中的错误是什么?

4

1 回答 1

1

我猜你得到的索引越界异常,因为可能有超过 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 在客户端进行评估。所以这意味着他们两个没有真正的合作方式。

我们对脚本标签之间的代码行所做的是写出浏览器在下载渲染页面后将运行的 javascript。就剃刀而言,它只是在那个地方写出一个字符串。尽管部分语言看起来很相似,但 razor 对 javascript 一无所知。Json.Encode (razor) 将您的列表对象序列化为 json。Html.Raw (razor) 确保输出没有被编码。(删除它并在浏览器中查看页面的源代码,以了解为什么需要这样做。)

于 2012-12-14T11:41:08.377 回答