Javascript 通过ajax调用将Html字符串从视图传递到控制器

Javascript 通过ajax调用将Html字符串从视图传递到控制器,javascript,c#,jquery,ajax,asp.net-mvc,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, typ

我需要将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;
}
我的控制器操作方法:

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()
和提交按钮,但是这些解决方案都不适合我的需要。

发送Html内容是不安全的,所以你会得到一个错误。虽然可以绕过此错误,但不建议禁用输入验证:

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;
        }
[ValidateInput(false)]
public class YouController: Controller{

}

发送Html内容不安全,因此您将收到错误。虽然可以绕过此错误,但不建议禁用输入验证:

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

}

可能内容类型错误,但您可以从浏览器内部检查错误(使用网络选项卡并单击您的请求,甚至使用fiddler)

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

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

可能内容类型错误,但您可以从浏览器内部检查错误(使用网络选项卡并单击您的请求,甚至使用fiddler)

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

error: function(xhr, status, error) {
  alert(err.responseText);
}
如果您在contentType中定义了“application/json”,则必须在stringify操作之后发送它

$.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”,您可以在不使用json.stringify的情况下将对象传递给数据参数。

如果您在contentType中定义了“application/json”,则必须在stringify操作后发送它

$.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”,您可以在不使用json.stringify的情况下将对象传递给数据参数。

谢谢您的回复

我可以通过添加一个带有[AllowHtml]属性的字符串属性并通过模型传递我的html来解决这个问题


然而,由于一些用户回应说传递html是不安全的,所以我在控制器中编写了一个方法来生成相同的html。再次感谢您的回答

感谢您的回复

我可以通过添加一个带有[AllowHtml]属性的字符串属性并通过模型传递我的html来解决这个问题


然而,由于一些用户回应说传递html是不安全的,所以我在控制器中编写了一个方法来生成相同的html。再次感谢您的回答

当您尝试运行代码时,是否从MVC收到错误?我的代码没有命中控制器,javascript失败!您从javascript中得到了什么错误?(您可以打开控制台查看错误消息)我的控制台中有500个内部服务器错误。我的控制器中的断点从未命中。但是,如果我不在ajax中传递任何数据(只传递null)并使控制器中的参数成为可选的,那么就没有问题了。所以,我假设在传递html时出现了问题?您需要检查返回的文本以及500。它可能说你发送了一个潜在危险的请求。有关更多信息,请参阅。当您尝试运行代码时,是否从MVC收到错误?我的代码没有命中控制器,javascript失败!您从javascript中得到了什么错误?(您可以打开控制台查看错误消息)我的控制台中有500个内部服务器错误。我的控制器中的断点从未命中。但是,如果我不在ajax中传递任何数据(只传递null)并使控制器中的参数成为可选的,那么就没有问题了。所以,我假设在传递html时出现了问题?您需要检查返回的文本以及500。它可能说你发送了一个潜在危险的请求。有关更多信息,请参阅。您需要将html字符串化。您需要将html字符串化