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>

しかし、これはRazorスクリプトのロード中にエラーを引き起こしますgetnodes.cshtmlコードの間違いは何ですか?

4

1 に答える 1

1

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(かみそり)は、出力がエンコードされていないことを確認します。(それを削除し、ブラウザーでページのソースを表示して、それが必要な理由を理解してください。)

于 2012-12-14T11:41:08.377 に答える