我在我的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数据的替代方法是什么?
答案 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的方法,您可以决定只创建一个序列化程序实例,并重新使用该实例,如果您需要执行多个序列化,这将更有效地记忆。如果你使用扩展方法,那就不是线程安全的。