我有一个包含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)也没有运气。
答案 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!!');
}
});