私はスクリプトに配列を取り込もうとしています(後でD3.JSでチャートを作成するために使用されます)。 this postによると、私は以下の構文を使用するはずです。しかし、それはうまく行かないので、うまく行かないのです。キャッチされていないReferenceError:WebSiteが定義されていません。は名前空間の名前です私のプロジェクトの名前)。JavaScriptのJSONオブジェクトの配列をMVCのカスタムビューモデルのRazorページで作成していますか?
<script>
var data = new Array();
@foreach (var piece in @Model.DataPieces)
{
@:data.push(@piece);
}
</script>
私は次の変更は、それが(少なくともエラーの束を生成していない)動作しますので、それは、作品のデータ型に関係しているかなり確信しています。私は個のオブジェクトから個々のフィールドを取り出して、それらを新しいオブジェクトとして配列にプッシュします。
<script>
var data = new Array();
@foreach (var piece in @Model.DataPieces)
{
@:data.push({'cat': '@piece.Category', 'key': '@piece.Key', 'val': '@piece.Value'});
}
</script>
モデルが変更されるたびに間違いが発生しやすく、リファクタリングが必要になります。最初のサンプルに示すように、この方法を避けて、割り当て時に自動的にJSONオブジェクトを作成できるようにするにはどうすればよいですか?
剃刀ページのビューモデルは、次のように宣言されています。
namespace WebSite.Models
{
public class DrillDataViewModel
{
public List<DataPiece> DataPieces { get; set; }
public class DataPiece
{
public string Category { get; set; }
public string Key { get; set; }
public int Value { get; set; }
}
}
}
誰もがこのようにして、単にjson出力としてjavascript変数に配列全体を渡すのではないかどうかはわかりません。 Javascriptコンパイラは、印刷されたjsonを、完全に使用可能なjavascript配列として表示します。 – charlietfl
@charlietflいくつかの理由が考えられます。無知はおそらく最も可能性が高い。あなたはそれにどのようにアプローチすることを提案しますか?私は* @ Model *の配列を持っています。どうすればJavaScriptメソッドに渡すことができますか?私たちは* onload *について話していますか?詳しく教えてください。 –
いいえ...オンロードしません。あなたのカミソリを作るのではなく、あなたの配列をjsonにシリアル化し、 'var data = <%serialized_json_output%>'を出力してください。私はドットネットの構文が分からない。今すぐブラウザが使用されるとすぐに使用できる状態になります – charlietfl