导出为CSV从MVC控制器和视图显示在页面的CSV原始数据 [英] Export to CSV from MVC Controller and View displays CSV raw data on Page

查看:134
本文介绍了导出为CSV从MVC控制器和视图显示在页面的CSV原始数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚拿到了我的MVC视图导出到Excel工作的伟大,但是,因为我设置location.href这是留给我一个整版CSV数据,而不是纯网格结果的用户打EXPORT按钮前。

我试图去思考如何改变下面的脚本做什么它做什么,但独自离开页面。我试图使到搜索调用再次返回到服务器,但在运行时用户看到的将CSV网页上随时,这是不好的。

任何想法多少AP preciated,干杯

  $(函数(){
        $('#exportButton')。点击(函数(){
            VAR URL = $('#AbsolutePath)VAL()+'Waste.mvc /导出。            VAR数据= {
                SEARCHTEXT:$('#SearchTextBox)VAL()的toString()。
                sea​​rchTextSite:$('#SearchTextBoxSite)VAL()的toString()。
                开始日期:$('#起始日期)VAL()
                结束日期:$('#结束日期)VAL()
            };
            $('#ResultsList')。负载(URL,数据功能(){
                $('#LoadingGif')空();
                location.href =网址+ + + data.searchText与& searchTextSite =SEARCHTEXT =?+ data.searchTextSite +&放大器;起始日期=+ data.StartDate +&放大器;结束日期=+ data.EndDate;
            });
            //搜索();这修正,因为电网的csv后的结果再次显示
        });
    });

我的控制器code:

 公共FileStreamResult导出(串SEARCHTEXT,串searchTextSite,串起始日期,结束日期字符串)
    {        VAR的SearchResult = getSearchResults(SEARCHTEXT,searchTextSite,起始日期,结束日期);
        HttpContext.Response.AddHeader(内容处置,附件;文件名= Export.csv);        变种SW =新的StreamWriter(新的MemoryStream());        sw.WriteLine(\\参考\\,\\源\\,\\收集\\);
        的foreach(在searchResults.ToList()VAR线)
        {
            sw.WriteLine(的String.Format(\\{0} \\,\\{1} \\,\\{2} \\,
                                       line.WasteId,
                                       line.SourceWasteTypeId.ToDescription(),
                                       line.CollectedDate.ToShortDateString()));
        }
        sw.Flush();
        sw.BaseStream.Seek(0,SeekOrigin.Begin);        返回新FileStreamResult(sw.BaseStream,文/ CSV);
        //返回文件(sw.BaseStream,文/ CSV,report.csv);呈现相同的结果    }


解决方案

感谢您的指导,它帮助让我在那里。我设置能见度一个DIV隐藏:

 < D​​IV ID =ExportList的风格=能见度:隐藏;明确:既;>
< / DIV>

我把具有网格结果DIV下面这个隐藏分区,网格结果留在地方和隐藏CSV流写入到页面和弹出提示时再开到Excel

下面是javascipt的我完成,我认为这可能是整洁,虽然。不必使用额外的DIV,但它不是太糟糕了:

  $(函数(){
        $('#exportButton')。点击(函数(){
            VAR URL = $('#AbsolutePath)VAL()+'Waste.mvc /导出。            VAR数据= {
                SEARCHTEXT:$('#SearchTextBox)VAL()的toString()。
                sea​​rchTextSite:$('#SearchTextBoxSite)VAL()的toString()。
                开始日期:$('#起始日期)VAL()
                结束日期:$('#结束日期)VAL()
            };
            $('#ExportList')。负载(URL,数据功能(){
                $('#LoadingGif')空();
                location.href =网址+ + + data.searchText与& searchTextSite =SEARCHTEXT =?+ data.searchTextSite +&放大器;起始日期=+ data.StartDate +&放大器;结束日期=+ data.EndDate;
            });        });
    });

I've just got my MVC view export to Excel working great, however, because i'm setting location.href this is leaving me with a page full of CSV data rather than the neat grid results before the user hit EXPORT button.

I'm trying to think how to change the following script to do what its doing but to leave the page alone. I tried making a call to the search to go back to server again but at runtime user see's the CSV on the webpage momentarily, which is not good.

Any ideas much appreciated, Cheers

    $(function() {
        $('#exportButton').click(function() {
            var url = $('#AbsolutePath').val() + 'Waste.mvc/Export';

            var data = {
                searchText: $('#SearchTextBox').val().toString(),
                searchTextSite: $('#SearchTextBoxSite').val().toString(),
                StartDate: $('#StartDate').val(),
                EndDate: $('#EndDate').val()
            };
            $('#ResultsList').load(url, data, function() {
                $('#LoadingGif').empty();
                location.href = url + "?searchText=" + data.searchText + "&searchTextSite=" + data.searchTextSite + "&StartDate=" + data.StartDate + "&EndDate=" + data.EndDate;
            });
            //Search(); this fixes because grid is displayed again after csv results
        });
    });

My Controller Code:

    public FileStreamResult Export(string searchText, string searchTextSite, string StartDate, string EndDate)
    {

        var searchResults = getSearchResults(searchText, searchTextSite, StartDate, EndDate);
        HttpContext.Response.AddHeader("content-disposition", "attachment; filename=Export.csv");

        var sw = new StreamWriter(new MemoryStream());

        sw.WriteLine("\"Ref\",\"Source\",\"Collected\"");
        foreach (var line in searchResults.ToList())
        {
            sw.WriteLine(string.Format("\"{0}\",\"{1}\",\"{2}\"",
                                       line.WasteId,
                                       line.SourceWasteTypeId.ToDescription(),
                                       line.CollectedDate.ToShortDateString()));
        }
        sw.Flush();
        sw.BaseStream.Seek(0, SeekOrigin.Begin);

        return new FileStreamResult(sw.BaseStream, "text/csv");
        // return File(sw.BaseStream, "text/csv", "report.csv"); Renders the same result

    }

解决方案

Thanks for the guidance, it helped get me there. I set a DIV with visibility to hidden:

<div id="ExportList" style="visibility:hidden;clear:both;">                       
</div>

I placed this hidden div below the DIV that has the grid results, the grid results stay in place and the hidden CSV stream is written to page and popup prompt appears then open to Excel

Here is the Javascipt I finished on, I think this could be neater though. Not having to use the extra DIV, but its not too bad :

    $(function() {
        $('#exportButton').click(function() {
            var url = $('#AbsolutePath').val() + 'Waste.mvc/Export';

            var data = {
                searchText: $('#SearchTextBox').val().toString(),
                searchTextSite: $('#SearchTextBoxSite').val().toString(),
                StartDate: $('#StartDate').val(),
                EndDate: $('#EndDate').val()
            };
            $('#ExportList').load(url, data, function() {
                $('#LoadingGif').empty();
                location.href = url + "?searchText=" + data.searchText + "&searchTextSite=" + data.searchTextSite + "&StartDate=" + data.StartDate + "&EndDate=" + data.EndDate;
            });

        });
    });

这篇关于导出为CSV从MVC控制器和视图显示在页面的CSV原始数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆