我有一个MVC应用程序正在呈现客户端上呈现以下javascript:
var rawData = [{"ID":5317,"Code":"12345","Description":"sometext \u003c/= 100"}];
JSON数据是使用JavaScriptSerializer序列化对象然后通过Html.Raw()帮助程序运行结果的结果。
然后,此数据用于加载挖空视图模型并在悬停时显示弹出窗口。在弹出窗口中,只有“Description”属性的“sometext”部分显示为设置rawData变量时字符串转换为未编码的版本(即\ u003c转换为<)。
此外,这些数据最终在保存数据时被发送回服务器,并且ASP.NET验证启动并且因为它检测到“
我暂时通过在我的Knockout View模型中添加一个计算属性来解决这个问题:
self.DescriptionEncoded = ko.observable('');
self.Description = ko.computed({
read: function() {
return self.DescriptionEncoded ();
},
write: function(value) {
self.DescriptionEncoded($('<div/>').text(value).html());
}
});
通过这种方式,我可以从弹出窗口访问转义属性,并且当我序列化我的viewmodel(使用.toJSON())时,未转义的值不会发送回服务器。
是否有一种更全局的方法来处理这种情况,而不是为每个对象创建计算属性,这些对象可能有一些看似不好的文本,而不会影响安全性?我已经考虑了序列化例程的重载/帮助程序,它接受一个属性列表来应用查找/替换我认为这将必须按照与我已经类似的方式逐个处理完成。至于将数据发送回服务器,我可以覆盖视图模型上的toJSON()方法并删除不需要发回的属性,但这对我的弹出窗口没有帮助。
思想?