通过Ajax Asp.Net MVC传递HTML代码

时间:2015-09-17 15:06:58

标签: javascript c# asp.net-mvc

我正在尝试通过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);

这是对的吗?

1 个答案:

答案 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。