Html.Raw(Json.Encode和Internet Explorer 9

时间:2012-07-31 21:14:20

标签: json asp.net-mvc-3 internet-explorer-9

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

 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中获取ViewModel数据的替代方法是什么?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我真的很喜欢特拉维斯的解决方案。另一种选择(如果您使用的是C#3.0或更新版本)是使用扩展方法。

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

这是一个完全哲学的选择,但是......是使用继承还是扩展方法。我个人的选择是扩展方法,因为它感觉稍微清洁,耦合较少。这只是我的意见。

但是,使用Travis的方法,您可以决定只创建一个序列化程序实例,并重新使用该实例,如果您需要执行多个序列化,这将更有效地记忆。如果你使用扩展方法,那就不是线程安全的。