我正在尝试通过Ajax传递一个HTML代码:
使用插件'summernote'(WYSIWYG Editor)
var description = $('#ticketDescription').code();
这给我举个例子:
<span style="font-weight: bold;">asdasdasd<span>sadasd
当Ajax处理时,这会产生500内部错误
$.ajax({
url: '/Ticket/NewTicket',
type: 'POST',
data: {
companyId: companyId,
subject: subject,
ticketDescription: description
},
success: function(result) {
....
},
error: function(result) {
}
});
通过删除'&lt;'解决问题字符串中的字符。 对此有何解决方案? 感谢
编辑:到目前为止我找到的唯一方法是: 在javascript中:
description = escape(description);
并在控制器中:
ticketDescription = HttpUtility.UrlDecode(ticketDescription);
这是对的吗?
答案 0 :(得分:3)
ValidateInput 和 AllowHtml 属性
默认情况下,Asp.Net MVC不允许用户提交html以避免对您的应用程序进行跨站点脚本攻击。
验证输入属性
这是允许提交HTML的简单方法。此属性可以在控制器级别或任何操作方法启用或禁用输入验证。 控制器级别的ValidateInput
[ValidateInput(false)]
public class HomeController : Controller
{
public ActionResult AddArticle()
{
return View();
}
[HttpPost]
public ActionResult AddArticle(BlogModel blog)
{
if (ModelState.IsValid)
{
}
return View();
}
}
现在,用户可以成功为此Controller提交Html。 动作方法级别的ValidateInput
public class HomeController : Controller
{
public ActionResult AddArticle()
{
return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult AddArticle(BlogModel blog)
{
if (ModelState.IsValid)
{
}
return View();
}
}
现在,用户可以成功为此操作方法提交Html。
ValidateInput属性的限制 此属性也有问题,因为这允许所有属性的Html输入,这是不安全的。由于您只为一两个属性启用了Html输入,因此如何执行此操作。要允许单个属性的Html输入,您应该使用AllowHtml属性。
AllowHtml属性
这是允许为特定媒体提交HTML的最佳方式。此属性将添加到模型的属性中,以仅绕过该属性的输入验证。此显式声明比ValidateInput属性更安全。
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
public class BlogModel
{
[Required]
[Display(Name = "Title")]
public string Title { get; set; }
[AllowHtml]
[Required]
[Display(Name = "Description")]
public string Description{ get; set; }
}
确保已从Conroller或Action方法中删除了ValidateInput属性。现在,用户只能为Description属性成功提交Html。