2013-09-23 114 views
0

我有一個這樣的視圖模型:從控制器傳遞字典爲Javascript

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

您的屬性已經被序列化,這意味着它已經是JSON。你不想反序列化的視圖,只是寫出來直接:

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

另一種方法是使你的財產Dictionary<string, float>而不是字符串,那麼你會序列化的觀點:

東西我剛剛讀到這可能使你的觀點有點清潔 - 實際上你可以轉儲JSON到它自己的script標籤與type="application/json",並在javascript引用它。這可能會讓你的編輯更快樂一些,因爲從C#代碼中分離出JavaScript更容易。

喜歡的東西:

<!-- 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