Html.Raw(Json.Encode和Internet Explorer 9

Html.Raw(Json.Encode和Internet Explorer 9,json,asp.net-mvc-3,internet-explorer-9,Json,Asp.net Mvc 3,Internet Explorer 9,我在Javascript中使用Html.Raw(Json.Encode)获取传递给MVC 3 asp.net(razor)应用程序中视图的ViewModel属性的内容,如下所示: var state = @(Html.Raw(Json.Encode(Model.State))); 状态是在我的模型中定义的 public class IndexViewModel { //..other props public string State { get;

我在Javascript中使用
Html.Raw(Json.Encode
)获取传递给MVC 3 asp.net(razor)应用程序中视图的ViewModel属性的内容,如下所示:

 var state = @(Html.Raw(Json.Encode(Model.State))); 
状态是在我的模型中定义的

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


    }
它在FF、IE8中像一个符咒一样工作,但在IE9中却被扼杀了

关于上面在IE 9中更改的代码,我应该知道什么,这样就不再有效了吗?如果是的话,在JS中获取ViewModel数据的替代方法是什么

视图模型

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


var ViewModelData=@(Html.Raw(Model.StuffVM.AsJson());

我非常喜欢Travis的解决方案。另一种方法(如果您使用的是C#3.0或更新版本)是使用扩展方法

public static class ObjectExtensions
{
    static public string ToJson(this object model)
    {
        return new JavaScriptSerializer().Serialize(model);
    }
}
然而,这完全是一个哲学上的选择……无论是使用继承还是扩展方法。我个人选择扩展方法,因为它感觉稍微干净一些,耦合性更低。这只是我的观点

但是,使用Travis的方法,您可以决定只创建一个序列化程序实例,并在需要执行多个序列化时重用该实例,这在内存方面会更有效。如果使用扩展方法执行此操作,则不会是线程安全的

<script>
 var ViewModelData = @( Html.Raw(Model.StuffVM.AsJson()) );
</script>
public static class ObjectExtensions
{
    static public string ToJson(this object model)
    {
        return new JavaScriptSerializer().Serialize(model);
    }
}