我正在使用MVC 3模型绑定与JQuery serializer()一起编辑表单中的一些数据。一切都运作良好,除非我有一些' url-encoded' (我不知道一个更好的术语)我的数据中的文字。这个数据是因为我使用的是富文本编辑器,就像我现在使用的那样。
$.post("/controller/submit", $("form").serialize(), function (r) {....}
我的控制器就像
[HttpPost]
public ActionResult Confirm(MyViewModel model)
{
return PartialView(model);
}
一些会导致问题的数据如下所示
地点= DASD&安培;起始日期= 5-SEP-2011&安培;开始时间= 0%3A00&安培;结束时间= 0%3A00&安培;结束日期= 6-SEP-2011&安培;名称=你好&安培;描述=%3Cstrong%3Ebold +母亲%3C% 2Fstrong%3E&安培;定价=安培; BuyTicketsUrl =安培;类别ID = 1&安培; URL =&安培;出价= 0&安培; MaximumExpense = 0
你可以看到描述有像%3Cstrong%3E这样的东西,因为它是带有一些html编码文本的序列化文本框。我可以获取默认模型绑定器来获取html,还是可以更改JQuery序列化表单的方式?或者我应该使用JSON吗?
答案 0 :(得分:2)
.serialize()
方法可以完成它应该做的事情。在客户端,您无需做任何其他事情。问题是拒绝此输入的服务器。您可以使用[AllowHtml]
属性在视图模型上装饰Description
属性:
[AllowHtml]
public string Description { get; set; }
现在默认的模型绑定器很乐意分配此值。现在因为某些恶意用户可能决定对您的网站做一些讨厌的事情,如果您打算显示此HTML无代码,请确保通过AntiXss传递它。如果您总是要显示HTML编码的值,那么您就非常安全了=>只需将其按原样存储在数据库中,然后通过HTML编码显示。