model.Text) 现在文本可能包含一些类似 XML 的格式,当我在表单提交上尝-6ren">
gpt4 book ai didi

jquery - 只要发送的文本包含 "<",就不会从 $.ajax POST 调用操作方法

转载 作者:行者123 更新时间:2023-12-01 02:54:30 25 4
gpt4 key购买 nike

我使用以下内容在我的 Intranet 站点上显示一些文本:

@Html.TextAreaFor(model => model.Text)

现在文本可能包含一些类似 XML 的格式,当我在表单提交上尝试以下操作时,这似乎会出现问题:

$("form").on("submit", function () {
var model = $(this).serialize();
$.ajax({
url: "/Test/Foo",
type: "POST",
data: model,
dataType: "json",
success: doSomething(response)
});
return false;
});

该操作方法采用 POCO 作为网站的模型,并返回一些 JsonResult .

只要<textarea>中的文字即可是“正常”文本,没有问题,我正确输入了操作方法,并且我的 POCO 具有正确的属性值。但是一旦我输入文本 <foo> (带大括号)进入 <textarea> ,我的操作方法不再被命中。

我尝试使用$(this).serializeArray()相反,它也不起作用。 serialize()serializeArray()方法甚至替换了“<”和“">”符号(还有“=”;首先我认为这是导致问题的原因),所以我猜他们在内部使用 escape() ,但没有发送任何内容。

当我手动发送为 data

{
Text: escape($("#myTextArea").val()),
Description: $("#someInput").val(),
Id: $("input[type=hidden]").val()
}

它有效,也就是说,我输入了我的操作方法,但是当然我有一个格式奇怪的字符串可以在服务器上使用。

这里到底有什么问题?一些编码问题?我是否必须以其他方式序列化才能避免此问题?

最佳答案

这是 ASP.Net MVC 的一项安全功能。默认情况下,当它在接收到的值中检测到 HTML 时,它将阻止执行,以防它是 XSS 攻击的一部分。

要在操作上禁用此功能,您需要使用 ValidateInput 属性并将其设置为 false。试试这个:

[ValidateInput(false)]
public ActionResult Foo(Model myModel)
{
// your logic here...
}

您还可以使用 AllowHtml 属性在模型属性级别禁用此功能:

public class MyModel {
public Guid Id { get; set; }

[AllowHtml]
public String Description { get; set; }
}

关于jquery - 只要发送的文本包含 "<",就不会从 $.ajax POST 调用操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29696819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com