通过Ajax调用将HTML字符串从视图传递到控制器

时间:2018-09-06 19:46:50

标签: javascript c# jquery ajax asp.net-mvc

我有一个要求,我需要将div标签的所有HTML传递给控制器​​。 我可以获取HTML,但是当我通过Ajax传递HTML时,代码失败。

这是我的代码。

查看:

function abc() {

  var html = $("#div").html();

  data = {
    Html: html
  };

  $.ajax({
        url: '@Url.Action("DisplayResult", "Default")', //
        data: data,
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function(result) {
          //do something
        });
    },
    error: function(xhr) {
      alert("error");
    }
});
}

我的控制器的操作方法:

[HttpPost]
public FileResult DisplayResult(string Html)
{
    return null;
}

我在网上搜索并找到了一些相关的帖子,但是那些在谈论不同的解决方案,例如使用Html.Beginform()和提交按钮-但是这些解决方案都不符合我的需求。

4 个答案:

答案 0 :(得分:1)

发送HTML内容不安全,因此会出现错误。尽管您可以绕过此错误,但是禁用输入验证,但不建议这样做:

[ValidateInput(false)]
public class YouController: Controller{

}

答案 1 :(得分:0)

You have javascript errors and your call is wrong you will need to stringify the data.    

function abc() {
        var html = $("#div").html();
        var dataToSend = JSON.stringify({ 'Html': html });

        $.ajax({
            url: '/Home/DisplayResult', //
            data: dataToSend,
            type: "POST",
            contentType: "application/json; charset=utf-8",
            success: function (result) {
                //do something
    },
    error: function(xhr) {
        alert("error");
    }
    });
    }


    And I have this in HomeController:

        [HttpPost]
        public FileResult DisplayResult(string Html)
        {
            return null;
        }

答案 2 :(得分:0)

内容类型可能错误,但是您可以从浏览器内部检查错误(使用“网络”标签并单击您的请求,甚至使用提琴手)

如果不测试代码,我不能说太多,但是另一种选择是检查error函数的responseText:

error: function(xhr, status, error) {
  alert(err.responseText);
}

答案 3 :(得分:0)

如果在contentType中定义“ application / json”,则必须在字符串操作后将其发送。

$.ajax({
    url: '@Url.Action("DisplayResult", "Default")', //
    data: JSON.stringify(data),
    type: "POST",
    contentType: "application/json; charset=utf-8",
    success: function(result) {
      //do something
    });
},
error: function(xhr) {
  alert("error");
}

如果您未定义“ application / json”,则默认的contentType为“ application / x-www-form-urlencoded”,您可以将该对象传递给data参数而无需JSON.stringify。