繁体   English   中英

MVC5 控制器未接收到 ajax 发布的 html 内容

[英]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]

如果要将 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM