[英]MVC5 controller not receiving html content posted by ajax
检查下面的 JQuery 和 MVC5 控制器代码。 问题是,当我从 ajax 控制器Request.Form["des"]
发布任何 HTML 内容时,没有抓取 HTML 内容,但是,如果我发布普通文本,那么它接收得很好。 现在的问题是,HTML 内容有什么问题? 正如您在控制器代码中看到的那样,我还禁用了控制器上的输入安全性,但仍然无法获取 HTML。 请注意,我的目标是将 HTML 内容作为从 ajax 发布的字符串获取。 提前致谢
查询:
//var des = "test"; //this one receiving in controller successfully
var des = "<b>test</b>"; //this one not receiving in controller
var form_data = new FormData();
form_data.append('des', des);
$.ajax({
url: '/item/dosomething',
dataType: 'text',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function (response) {
console.log(response);
},
error: function (response) {
console.log(response);
}
});
MVC5 控制器:
[ValidateInput(false)]
[HttpPost]
public ActionResult DoSomething()
{
string des = Request.Form["des"];
return Json("ok");
}
如果要将 HTML 传递给服务器,则应考虑使用[AllowHtml]
属性来装饰属性(并避免通过[ValidateInput(false)]
属性禁用输入验证):
public class HtmlContent
{
[AllowHtml]
public string des { get; set; }
}
然后使用该类作为您希望在控制器操作中收到的内容:
[HttpPost]
public ActionResult DoSomething(HtmlContent content)
{
// Access your element here
var html = content.des;
return JsonResult("ok");
}
此外,由于您没有做任何过于复杂的事情,您可能会考虑简化现有的 AJAX 调用以利用简写$.post()
,如下所示:
var des = '<b>test</b>';
$.post('/item/dosomething', { des: des }, function(response) { console.log(response); });
如果您绝对需要发布表单(例如使用FormData
),您可能需要相应地调整您的电话。 值得注意的是,您仍然可以绑定到上面定义的同一个类(并根据需要添加其他属性):
var form_data = new FormData();
form_data.append('des', des)
$.ajax({
url: '/item/dosomething',
data: form_data,
processData: false,
contentType: false,
type: 'POST',
success: function(response){
console.log(response);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.