我有一个这样的视图模型:
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可以使用的位置?
答案 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之类的内容。