在ajax调用中将数据发送到控制器时接收空值

时间:2013-11-27 07:00:17

标签: jquery .net asp.net-mvc-3 controller

我有一个包含HTML表的div,我需要将该表传递给MVC3中的控制器。我试图使用ajax调用传递表。在调试时,我的控制器被我的操作声明,但传递给HTML表的值是null。我是否正确发送。问题是发送它。 请参考以下链接,即使他们遇到同样的问题 how to send html table from view to controller in mvc4

以下是我的ajax呼叫代码:

$('#frmLogin').submit(function () {

            var sendhtml = $('#divCashResultHolder').html();
           //alert(sendhtml);
            $.ajax({
                url: '@Url.Action("ExportData", "CashCollection")',//action method url which defined in controller
                type: 'POST',
                data: { "htmlTable": sendhtml },
                dataType: 'json',
               contentType: 'application/json; charset=utf-8',
                async: true,
               processData: false,
               success: function(){
   console.log('success!!');
}
            });

控制器代码

 [HttpPost]
    public ActionResult ExportData(string htmlTable)
    {

            Response.Buffer = true;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-disposition", "attachment;filename=CashCollection_" + DateTime.Now.Ticks + ".xls");

        return View("CashCollection");
    }

在控制器中,我将'string htmlTable'作为空值。我尝试将其设置为HTMLstring类型没有运气。此外,我尝试发送数据:JSON.stringify(sendhtml)也没有运气。

2 个答案:

答案 0 :(得分:3)

尝试使用JSON.stringify

传递数据
 data: JSON.stringify({"htmlTable": sendhtml});

答案 1 :(得分:0)

这里的问题是数据来到控制器。这是有效的。默认情况下,他们不允许发送html数据进行控制。

允许我们使用 [ValidateInput(false)]

然后您的控制器应如下所示:

[HttpPost]
[ValidateInput(false)]
    public ActionResult ExportData(string htmlTable)
    {

            Response.Buffer = true;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-disposition", "attachment;filename=CashCollection_" + DateTime.Now.Ticks + ".xls");

        return View("CashCollection");
    }

如果这不起作用。那么它可能是你的ajax方法问题。然后尝试将您的数据作为FormData发送。然后你的ajax方法应该是这样的:

$('#frmLogin').submit(function () {

            var sendhtml = $('#divCashResultHolder').html();
           //alert(sendhtml);
        var fd = new FormData();
        fd.append("htmlTable", sendhtml );

            $.ajax({
                url: '@Url.Action("ExportData", "CashCollection")',//action method url which defined in controller
                type: 'POST',
                data: fd,
                enctype: 'application/form-data',
                processData: false,
                contentType: false,
                success: function(){
                        console.log('success!!');
               }
            });