尝试发送和返回原始 html 时 Ajax 调用不起作用

问题描述

我正在使用 Ajax 调用调用 C# 方法,该方法通过删除不需要的 html 标记属性来处理用户粘贴输入。

当我粘贴带有 html 格式(标签属性)的内容时,我的 Ajax 调用不起作用。能否请您建议如何为这种情况定义 Ajax 参数(将原始 html 发送到服务器端代码并​​返回原始 html)?

查看:

@(Html.Kendo().Editor()
 .Name("myEditor")
 .PasteCleanup(p => p.Custom("myPasteCleanUp")
)

脚本:

function myPasteCleanUp(input) {
      var response = null;
      if (input != null) {
       $.ajax({
         type: "POST",url: '/Home/htmlTagCleanUp',data: { userInput: input },async: false,success: function (response) {
            input = response;
         },});
     }
    return input;
   }

控制器:

[HttpPost]
[AllowAnonymous]
public ActionResult htmlTagCleanUp(string userInput)
{
  userInput = userInput;
  return Content(userInput,"text/html");
}

解决方法

事实证明缺失的部分是清理 HTML:

var  = document.createElement('div');
element.innerText = html;
var sanitizedHTML = element.innerHTML;
,

阻止您的 AJAX 调用的原因是您添加了 if 条件:

if (html != null) {
}

你能告诉我 html 变量是在哪里定义的吗?尽管如此,我认为您正在尝试检查输入的空值,如果我们在它应该工作的条件下将 html 替换为 input 变量:

if (input != null) {
}
,

我想问题在于 MVC 将带有标签的数据视为错误请求。

因此建议您在控制器中的操作方法上方尝试:

None
,

看起来您需要将 [ValidateInput(false)] 属性添加到您的方法中,因为它可能会被视为 XSS 攻击。

参考:ValidateInput(false) vs AllowHtml