asp.net datagrid导出到excel c#问题

asp.net datagrid导出到excel c#问题,c#,asp.net,excel,datagrid,C#,Asp.net,Excel,Datagrid,我有经典的asp.net网站。我有一个数据网格,我想导出为excel工作表。该站点使用windows身份验证 我拿起电话寻求解决办法。以下是我在FF和Chrome中的体验,需要帮助来纠正它: 有时,文件下载不会出现任何问题,但如果我让窗口保持不活动状态一分钟左右,然后重试,则我会发现页面未找到问题,或者浏览器会继续要求登录(有点陷入循环) 有些时候,当点击导出按钮时,FF会继续显示windows登录弹出窗口,就像它陷入了一个循环 按钮: <asp:Button ID="cmdExportD

我有经典的asp.net网站。我有一个数据网格,我想导出为excel工作表。该站点使用windows身份验证

我拿起电话寻求解决办法。以下是我在FF和Chrome中的体验,需要帮助来纠正它:

  • 有时,文件下载不会出现任何问题,但如果我让窗口保持不活动状态一分钟左右,然后重试,则我会发现页面未找到问题,或者浏览器会继续要求登录(有点陷入循环)

  • 有些时候,当点击导出按钮时,FF会继续显示windows登录弹出窗口,就像它陷入了一个循环

  • 按钮:

    <asp:Button ID="cmdExportDataGridToExcel_Click" runat="server" OnClick="cmdExportToExcel_Click" CssClass="StandardText" Text="Export to Excel" Width="120px" Height="33px"></asp:Button>
    
    更新1 我通过将数据放入会话中,然后从会话中创建excel来测试它。这也会导致同样的错误

    var dv = (DataView) Session["ScheduledOrdersReport"];
    
                Response.Clear();
                var userName = CommonMethods.GetUserId();
                var fileName = string.Format("ScheduledOrdersReport-{0}-{1:yyyyMMddhhmmsstt}.xls", userName, DateTime.Now);
    
                Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
                Response.Charset = "";
                Response.ContentType = "application/vnd.ms-excel"; //"application/vnd.xls";
    
                var stringWrite = new StringWriter();
                var htmlWrite = new HtmlTextWriter(stringWrite);
    
                var g = new GridView();
                g.DataSource = dv;
                g.DataBind();
    
                g.RenderControl(htmlWrite);
                Response.Write(stringWrite.ToString());
                Response.End();
    
    更新2 我只是做了另一个测试,打开一个弹出窗口,然后使用更新1代码。无问题,单击或保留页面一段时间,然后再次单击按钮

    看起来这是回邮和回复的问题


    我只是在这个时候找不到任何合适的方法来解决这个问题。也许我需要休息一下

    如何启动webclient? 并设置网络凭据?那么你不能每次都登录

    比如:

    `

    var dv = (DataView) Session["ScheduledOrdersReport"];
    
                Response.Clear();
                var userName = CommonMethods.GetUserId();
                var fileName = string.Format("ScheduledOrdersReport-{0}-{1:yyyyMMddhhmmsstt}.xls", userName, DateTime.Now);
    
                Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
                Response.Charset = "";
                Response.ContentType = "application/vnd.ms-excel"; //"application/vnd.xls";
    
                var stringWrite = new StringWriter();
                var htmlWrite = new HtmlTextWriter(stringWrite);
    
                var g = new GridView();
                g.DataSource = dv;
                g.DataBind();
    
                g.RenderControl(htmlWrite);
                Response.Write(stringWrite.ToString());
                Response.End();
    
    `using(Webclient webclient = new Webclient())
       {
         webClient http = new Webclient();
         http.Credentials = new NetworkCredential("YourUsername", "YourPassword");
        }