将字典从控制器传递到Javascript

时间:2013-09-23 20:23:14

标签: javascript dictionary

我有一个这样的视图模型:

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可以使用的位置?

1 个答案:

答案 0 :(得分:0)

您的属性已经序列化,这意味着它已经是JSON。您不希望在视图上反序列化它,只需直接写出来:

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

另一种方法是让你的属性为Dictionary<string, float>而不是字符串,然后你会在视图上序列化它:

 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之类的内容。