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);

另一种选择是使您的属性 aDictionary<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的东西。

于 2013-09-23T20:27:50.970 回答