1

Html.Raw(Json.Encode在我的 Javascript 中使用来获取传递给我的 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 数据的替代方法是什么?

4

2 回答 2

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>
于 2012-07-31T21:20:19.900 回答
0

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

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

然而,这是一个完全哲学的选择......无论是使用继承还是扩展方法。我个人的选择是扩展方法,因为它感觉更干净,耦合更少。这只是我的看法。

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

于 2013-07-06T18:07:55.880 回答