Code Bye

mvc如何将视图中的一个table传到控制器 导出为excel

 

view中我用jquery操作
<script type=”text/javascript”>
    $(
    function () {
        $(“#btnExport”).click(function () {
            console.log($(“#exporttable”).html())
            //            $.ajax({
            //                type: “POST”,
            //                url: “/Admin/ExportExcel”,
            //                data: { content: “测试数据” },
            //                success: function (data) { },
            //                dataType: “json”
            //            });
            $.post(“/Admin/ExportExcel”,
            { content: $(“#exporttable”).html() },
             “json”
             ); //post end
        } //click end
        );
    }
    );
</script>
控制器中导出excel
[HttpPost]
        public FileResult ExportExcel( FormCollection form )
        {
             //第一种:使用FileContentResult
            string content=Request[“content”];
            byte[] fileContents = Encoding.Default.GetBytes(content);
            return File(fileContents, “application/ms-excel”, “课程设计选题情况.xls”);
             
             //第二种:使用FileStreamResult
             //var fileStream = new MemoryStream(fileContents);
             //return File(fileStream, “application/ms-excel”, “fileStream.xls”);
 
             //第三种:使用FilePathResult
             //服务器上首先必须要有这个Excel文件,然会通过Server.MapPath获取路径返回.
             //var fileName = Server.MapPath(“~/uploads/选题信息导入模板.xls”);
             //return File(fileName, “application/ms-excel”, “fileName.xls”);
        }
Request[“content”]获取不到数据,,,,,大神给看看,或者有什么好的方法,教一下

 
引用 楼主 loop100 的回复:

             //第一种:使用FileContentResult
            string content=Request[“content”];
Request[“content”]获取不到数据

正确的写法是
Request.Form[“content”]
Request[“content”] 是获取querystring
/div>

貌似可以的,虽然用
public FileResult ExportExcel(string content)
更常见些,console.log($(“#exporttable”).html())有输出么?还有你的content里有html么,如果有,应该会出错的
另,从AJAX回复里应该不可以直接下载文件吧
引用 1 楼 rayaspnet 的回复:
Quote: 引用 楼主 loop100 的回复:

             //第一种:使用FileContentResult
            string content=Request[“content”];
Request[“content”]获取不到数据

正确的写法是
Request.Form[“content”]
Request[“content”] 是获取querystring
/blockquote>

Request.Form[“content”] 到控制器里还是没有数据啊

引用 2 楼 saucer 的回复:

貌似可以的,虽然用
public FileResult ExportExcel(string content)
更常见些,console.log($(“#exporttable”).html())有输出么?还有你的content里有html么,如果有,应该会出错的
另,从AJAX回复里应该不可以直接下载文件吧

console.log($(“#exporttable”).html())是有输出的,数据里是有html的 ,我想把整张table都传过去 ,在导出,求指导啊 怎么实现导出视图中的table


20分
引用 3 楼 loop100 的回复:
Quote: 引用 1 楼 rayaspnet 的回复:

fieldset>

Quote: 引用 楼主 loop100 的回复:

             //第一种:使用FileContentResult
            string content=Request[“content”];
Request[“content”]获取不到数据

正确的写法是
Request.Form[“content”]
Request[“content”] 是获取querystring
/blockquote>

Request.Form[“content”] 到控制器里还是没有数据啊
如果你要传递 Html 内容,要在action 上面 取消 对post 内容的校验:
加上
pre class=”brush: csharp”>[ValidateInput(false)]
[HttpPost]
        public FileResult ExportExcel( FormCollection form )
        {
}


20分
<div id=”exporttable”>
<table >
    <tr>
        <td>1</td>
        <td>2</td>
    </tr>
    <tr>
        <td>3</td>
        <td>4</td>
    </tr>
</table>
    </div>
<button id=”btnExport”>Export</button>
<iframe id=”export” name=”export” style=”display:none”></iframe>
<form name=”excel” method=”post” action=”/Home/ExportExcel” target=”export”>
    <input type=”hidden” name=”content” id=”content” />
</form>
<script type=”text/javascript”>
    $(
    function () {
        $(“#btnExport”).click(function () {
            console.log($(“#exporttable”).html());
            $(“#content”).val($(“#exporttable”).html())
            document.forms[“excel”].submit();
        } //click end
        );
    }
    );
</script>
controller.cs:
 [HttpPost]
        [ValidateInput(false)] 
        public FileResult ExportExcel(string content)
        {
            //第一种:使用FileContentResult
            //string content = Request[“content”];
            byte[] fileContents = Encoding.Default.GetBytes(content);
            return File(fileContents, “application/ms-excel”, “课程设计选题情况.xls”);
}
web.config:
  <system.web>
    <httpRuntime targetFramework=”4.5″ requestValidationMode=”2.0″ />
引用 5 楼 rayaspnet 的回复:
Quote: 引用 3 楼 loop100 的回复:

fieldset>

Quote: 引用 1 楼 rayaspnet 的回复:

fieldset>

Quote: 引用 楼主 loop100 的回复:

             //第一种:使用FileContentResult
            string content=Request[“content”];
Request[“content”]获取不到数据

正确的写法是
Request.Form[“content”]
Request[“content”] 是获取querystring
/blockquote>

Request.Form[“content”] 到控制器里还是没有数据啊
如果你要传递 Html 内容,要在action 上面 取消 对post 内容的校验:
加上
pre class=”brush: csharp”>[ValidateInput(false)]
[HttpPost]
        public FileResult ExportExcel( FormCollection form )
        {
}
fieldset>

引用 7 楼 saucer 的回复:

仅作参考(作生产之用,还要考虑异常什么的等等),用了.NET 4.5/MVC 4

会报错,应该就死 saucer 大神说的那个吧,检测到有潜在危险的 Request.Form 值

换个思路用execCommand的saveas参数也不行,,,,
  //第一种:使用FileContentResult
            string content=Request[“content”];
            byte[] fileContents = Encoding.Default.GetBytes(content);
            return File(fileContents, “application/ms-excel”, “课程设计选题情况.xls”);
使用这种 导出的excel中的汉字变成乱码了  有什么解决的好方法

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mvc如何将视图中的一个table传到控制器 导出为excel