问题描述
我正在使用 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 攻击。