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

Pass HTML code trough Ajax Asp.Net MVC

本文关键字:代码 MVC HTML 传递 Ajax Asp 通过      更新时间:2023-09-26

我正在尝试通过Ajax像这样传递html代码:

使用插件'summernote'(所见即所得编辑器)

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) {
                }
            });

这个问题可以通过从字符串中删除'<'字符来解决。有什么解决办法吗?由于

编辑:到目前为止我发现的唯一方法是:在javascript中:

description = escape(description);

,在控制器中:

ticketDescription = HttpUtility.UrlDecode(ticketDescription);

正确吗?

ValidateInputAllowHtml属性是您需要在属性

中设置的内容

默认为Asp。. Net MVC不允许用户为避免跨站脚本攻击而提交html。

<<p> ValidateInput属性/strong>

这是允许提交HTML的简单方法。此属性可以在控制器级别或任何操作方法上启用或禁用输入验证。控制器级别的ValidateInput

[ValidateInput(false)]
public class HomeController : Controller
{
 public ActionResult AddArticle()
 {
 return View();
 }
 [HttpPost]
 public ActionResult AddArticle(BlogModel blog)
 {
 if (ModelState.IsValid)
 {
 }
 return View();
 }
}

现在,用户可以成功地为这个控制器提交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属性。

<<p> AllowHtml属性/strong>

这是允许提交特定属性的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; }
} 

确保您已经从controller或Action方法中删除了ValidateInput属性。现在,用户只能成功提交Description属性的Html。