0

C#ビューのJSスニペットから 2 つの配列を使用したいと考えています。そうするために、私はを使用しようとしましたJavaScriptSerializer()が、データ配列は値を取得していません (ビューのソースは次のように表示されます):

 var mydata = 

<%=%>私が遭遇したすべての例では、タグを使用して JS に C# コードを挿入しています。ASP.NET MVC 4を使用しているため、これは結果をもたらしません。したがって、次のように試しました。

<script type="text/javascript">
   var mydata = @{ new JavaScriptSerializer().Serialize(Model.GetData());}

 $(function () {
  // Generates a chart using the mydata array
 }
</script>

この構文の何が問題になっていますか? その下にヘッダーの配列を追加しようとすると、コンパイル エラーが発生します。行が終了していないという警告がありますが、;各行の最後に追加すると、構文エラーも発生します(特定のエラーではなく、「構文エラー」のみ)。

GetData()とのデータGetHeaders()は次のように定義されます。

public List<int> GetData() {
    return new List<int>(new[] { 4, 5, 6});
}

として返そうとしましたint[]が、違いはありませんでした。JavaScript スニペットで C# リスト/配列を使用するにはどうすればよいですか?

編集: 不明なコンパイル エラーの画像。セミコロンを配置しないと、2 番目の構文エラーが発生しますvar。末尾にセミコロンを追加して、行末を終了するよう提案されました。次に、以下に示すような問題があります。興味深い詳細: 通常、エラーの場所を示す赤いバーがファイルの横にありません。

つまり、スクリプトを実行すると、配列には期待値があり、すべてが正常に機能します。

ここに画像の説明を入力

4

4 に答える 4

6

問題は@{ }、コードのブロックを作成することです。レンダリングされたページに結果を出力しません。あなたはこれを行うことができます:

@{ 
    var serializer = new JavaScriptSerializer();
    @serializer.Serialize(Model.GetData())
}

またはさらに良いことに、Jsonヘルパーを使用します。

@Json.Encode(Model.GetData())
于 2013-09-26T14:00:27.550 に答える
1

操作をコード ブロック内に囲むと、明示的にレンダリングするように指示しない限り、出力はレンダリングされません。

これを試してください:

@Html.Raw(Json.Encode(Model.GetData()))
于 2013-09-26T14:03:00.717 に答える
-1

List を JavaScript 配列に変換して、js 内で使用できます。

これを試して:

<script type="text/javascript">
    var mydata = [];
    @foreach(int i in Model.GetData()) {
         <text>mydata.push(@i);</text>
    }

    $(function () {
       // Generates a chart using the mydata array
    }
</script>
于 2013-09-26T14:00:59.033 に答える