10を超えるノードが存在する可能性があるため、インデックスの範囲外の例外が発生していると思います。
かみそりのコードをtrycatchでラップしてからエラーを出力する方が、デバッグが簡単だと思います。これは実際にはランタイムエラーに対してのみ機能することに注意してください。
@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はクライアント側で評価されます。つまり、2人が協力する実際の方法がないということです。
スクリプトタグ間のコード行で行っているのは、レンダリングされたページをダウンロードした後にブラウザによって実行されるjavascriptを書き出すことです。かみそりに関する限り、それはその場所に文字列を書き出すだけです。言語の一部は似ていますが、かみそりはjavascriptについて何も知りません。Json.Encode(razor)は、リストオブジェクトをjsonにシリアル化します。Html.Raw(かみそり)は、出力がエンコードされていないことを確認します。(それを削除し、ブラウザーでページのソースを表示して、それが必要な理由を理解してください。)