Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在mvc中导出excel并在浏览器中显示,而不是下载文件_C#_Jquery_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 在mvc中导出excel并在浏览器中显示,而不是下载文件

C# 在mvc中导出excel并在浏览器中显示,而不是下载文件,c#,jquery,asp.net-mvc,asp.net-mvc-4,C#,Jquery,Asp.net Mvc,Asp.net Mvc 4,我正在尝试以excel格式导出webgrid数据,但它将在浏览器中写入内容,而不是下载内容。这是我的代码,我引用了很多例子,每个人都是这样说的,但没有一个是有效的。这是我的密码 var northwind = Database.Open("Northwind"); var sql = "SELECT CustomerID, CompanyName, ContactName, Address, City, Country, Phone FROM Customers"; var cu

我正在尝试以excel格式导出webgrid数据,但它将在浏览器中写入内容,而不是下载内容。这是我的代码,我引用了很多例子,每个人都是这样说的,但没有一个是有效的。这是我的密码

var northwind = Database.Open("Northwind");
    var sql = "SELECT CustomerID, CompanyName, ContactName, Address, City, Country, Phone FROM Customers";
    var customers = northwind.Query(sql);

    var connString = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0;
                                    Data Source={0}/{1};Extended Properties='Excel 8.0;HDR=Yes;'", 
                                    appData, newFileName);
    var provider = "System.Data.OleDb";

    using (var excel = Database.OpenConnectionString(connString, provider)){

        sql = @"INSERT INTO [Sheet1$] (CustomerID, CompanyName, ContactName, Address, City, Country, Phone) 
            VALUES (@0,@1,@2,@3,@4,@5,@6)";
        foreach(var customer in customers){
            excel.Execute(sql,  
                customer.CustomerID, 
                customer.CompanyName, 
                customer.ContactName, 
                customer.Address, 
                customer.City, 
                customer.Country, 
                customer.Phone);
        }
    }

    Response.AddHeader("Content-disposition", "attachment; filename=report.xls");
    Response.ContentType = "application/octet-stream";
    Response.TransmitFile(newFile);
    Response.Flush();
    File.Delete(newFile);
    Response.End(); 
我的观点是

    <script type="text/javascript">
        $(function () {
            $('#excel').appendTo($('tfoot tr td')).on('hover', function () {
                $(this).css('cursor', 'pointer');
            });
            $('#excel').on('click', function () {
                $('<iframe src="/GenerateExcel"></iframe>').appendTo('body').hide();
            });
        });
    </script>


@{
    Page.Title = "Export To Excel";
    var db = Database.Open("Northwind");
    var query = "SELECT CustomerID, CompanyName, ContactName, Address, City, Country, Phone FROM Customers";
    var data = db.Query(query);
    var grid = new WebGrid(data, ajaxUpdateContainerId: "grid");
}

    <h1>Export to Excel</h1>
    <div id="gridContainer">
        <div id="grid">
            @grid.GetHtml(    
                tableStyle : "table",
                alternatingRowStyle : "alternate",
                headerStyle : "header",
                columns: grid.Columns(
                    grid.Column("CustomerID", "ID"),
                    grid.Column("CompanyName", "Company Name"),
                    grid.Column("ContactName", "Contact Name"),
                    grid.Column("Address"),
                    grid.Column("City"),
                    grid.Column("Country"),
                    grid.Column("Phone")
                )
            )
            <img src="/images/excel-icon.png" id="excel" alt="Export to Excel" title="Export to Excel" />
        </div>
    </div>
我在下面的站点中找到了上面的代码,并尝试复制相同的代码,但在浏览器中编写内容而不是下载。这是来源


有什么帮助吗?

为此,我使用以下代码

  Response.Clear();
  Response.AddHeader("content-disposition", "attachment;filename=download.xlsx");
  Response.Charset = "";
  Response.Cache.SetCacheability(HttpCacheability.NoCache);
  Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  content.CopyTo(context.Response.OutputStream); //content is the file stream
  Response.End();
因此,不要使用TransmitFile方法,而是尝试使用Response.OutputStream。

尝试将Response.ContentType更改为


您是否在配置或IIS中定义了名为application/octet stream的MIME类型,如果是,请删除。
Response.ContentType = "application/ms-excel";