0

私はこのようなビューモデルを持っています:

public class weightdata
{
    ...some properties
    public string weights;
}

次に、コントローラーに次のものがあります。

weightdata details = new weightdata();
Dictionary<string,float> dict = new Dictionary<string,float>();
//do something to fill the dictionary with values
var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
details.weights = ser.Serialize(dict);
return View(details);

次に、ビューで:

 <script type="text/javascript">

    var dict = @{Html.Raw(new JavaScriptSerializer().Deserialize<Dictionary<string,float>>(Model.Weights));}
 </script>

しかし、ページのレンダリングは次のとおりです: var dict = (空白です)

この値の辞書を JavaScript で使用できる場所に取得するにはどうすればよいですか?

4

1 に答える 1

0

プロパティはすでにシリアル化されています。つまり、すでに JSON になっています。ビューでデシリアライズしたくないので、直接書き出すだけです:

var dict = @Html.Raw(Model.Weights);

もう 1 つの方法は、プロパティをDictionary<string, float>文字列ではなく a にすることです。次に、ビューでそれをシリアル化します。

 var dict = @Html.Raw(new JavaScriptSerializer().Serialize(Model.Weights));

最近読んだばかりで、ビューが少しきれいになる可能性があります.JSONを実際に独自のscriptタグにダンプtype="application/json"し、javascriptで参照できます. これにより、javascript を C# コードから分離しやすくなるため、エディターが少し楽になるかもしれません。

何かのようなもの:

<!-- assuming your Weights property is the serialized JSON string -->
<script id="some-json" type="application/json">
    @Model.Weights
</script>
<script type="text/javascript">
    var dict = JSON.parse(document.getElementById("some-json").innerHTML);
</script>

IE8+ または実際のブラウザーをターゲットにしていることを確認してください。IE7 のサポートが必要な場合は、json2.jsのようなものが必要になります。

于 2013-09-23T20:27:50.970 に答える