微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决尝试发送和返回原始 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。