模型绑定url编码的字符串mvc 3

时间:2011-09-05 18:16:06

标签: asp.net-mvc-3 jquery model-binding

我正在使用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吗?

1 个答案:

答案 0 :(得分:2)

.serialize()方法可以完成它应该做的事情。在客户端,您无需做任何其他事情。问题是拒绝此输入的服务器。您可以使用[AllowHtml]属性在视图模型上装饰Description属性:

[AllowHtml]
public string Description { get; set; }

现在默认的模型绑定器很乐意分配此值。现在因为某些恶意用户可能决定对您的网站做一些讨厌的事情,如果您打算显示此HTML无代码,请确保通过AntiXss传递它。如果您总是要显示HTML编码的值,那么您就非常安全了=>只需将其按原样存储在数据库中,然后通过HTML编码显示。