2012-07-31 180 views
1

我用Html.Raw(Json.Encode在我的JavaScript搶傳遞給查看我的MVC 3 asp.net視圖模型屬性的內容(剃刀)應用程序如下:Html.Raw(Json.Encode和Internet Explorer 9

var state = @(Html.Raw(Json.Encode(Model.State))); 

國家在我的模型中定義爲這樣

public class IndexViewModel 
    { 
     //..other props 
     public string State { get; set; } 


    } 

它是這樣工作在FF,IE8一個魅力,但扼流圈IE 9

有什麼我應該知道上面的代碼次在IE 9中改變了,所以這不再起作用了?如果是這樣,這將是替代搶在你的JS視圖模型的數據?

回答

2

這裏是一個另類

視圖模型

public class StuffVM : AsSerializable 
{ 
    public List<Stuff> StuffList { get; set; } 
} 

基類

public abstract class AsSerializable 
{ 
    public string AsJson() 
    { 
     var serializer = new JavaScriptSerializer(); 
     return serializer.Serialize(this); 
    } 
} 

視圖

<script> 
var ViewModelData = @(Html.Raw(Model.StuffVM.AsJson())); 
</script> 
0

我真的很喜歡特拉維斯的解決方案。的替代方案(如果您使用C#3.0或更高版本)是使用一個擴展方法。

public static class ObjectExtensions 
{ 
    static public string ToJson(this object model) 
    { 
     return new JavaScriptSerializer().Serialize(model); 
    } 
} 

這是一個完全的哲學選擇,但是...是否使用繼承或擴展方法。我個人的選擇是擴展方法,因爲它感覺稍微更乾淨,耦合度更低。這是我的看法。

但是,使用特拉維斯的方法,你可以決定只需要創建一個序列化的一個實例,重用例如,如果你需要做的不止一個系列化這將是更高效的內存明智的。如果你這樣做有一個擴展方法,它不會是線程安全的。