现在位置首页 / 项目实战 /正文

asp.net mvc + javascript生成下载文件

作者: IT小兵 | 2015年11月6日| 热度:℃ | 评论: |参与:

近期做的是对现有项目进行重构。WEB FROM改成MVC,其实也算是推倒重来了。

里面有一个导出功能,将数据输出成txt文件,供下载。原先的做法是有一个隐藏的iframe,在这个iframe的页面中设置一个表单form,将相关参数提交到服务器端;而在服务器端,是真的生成一个文件,然后再将文件内容往客户端推送。

好奇怪的做法啊。将内容导出,让用户下载,不必真的生成文件的,因为内容千变万化,没有一次生成,多次使用的可能和必要。完全可以将内容生成后,直接往客户端推送。

其次,我理解原先为何要用一个隐藏的iframe。因为提交页面会导致刷新,为了避免页面内容刷新,于是搞了个隐藏的iframe,让它来负责提交。好是好,就是要多搞一个页面。

在新项目里面,前端,form由JS动态生成;服务器端,直接生成内容并推送:

前端:

<script type="text/javascript">    var f_pointXY = function () {
        function exportData() {//动态添加表单
            var form = $("<form>");
            form.attr('style', 'display:none');
            form.attr('target', '');
            form.attr('method', 'post');
            form.attr('action', "@Url.StaticFile("~/Common/YongHai/ExportData/")" + $("#txt_SMID").val());            var input1 = $('<input>');
            input1.attr('type', 'hidden');
            input1.attr('name', 'isExportInput');
            input1.attr('value', document.getElementById("chkInput").checked);            var input2 = $('<input>');
            input2.attr('type', 'hidden');
            input2.attr('name', 'exportFormat');
            input2.attr('value', document.getElementById("Select1").value);
            $('body').append(form);
            form.append(input1);
            form.append(input2);            try { form.submit(); } catch (ex) { alert(ex); }
            form.remove();//用完即弃
        }        return {
            exportData: function () {
                exportData();
            }
        };
    }();

服务器端:

 [HttpPost]
        public ActionResult ExportData(int id, FormCollection collection)
        {
            string content = ...;//生成内容
            Response.Clear();
            Response.Buffer = false;
            Response.ContentType = "application/octet-stream";
            Response.AppendHeader("content-disposition", "attachment;filename=" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt;");
            htm = htm&(content);
            Response.Flush();
            Response.End();            return new EmptyResult();
        }

这样,点击按钮导出按钮

<input type="button" value="导出" class="btn mini minilt" onclick="f_pointXY.exportData()" />


点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询