生成excel会清除viewbag / tempdata

问题描述 投票:0回答:1

我正在尝试通过以下代码生成excel

        public void GenerateExcel(string reportName, DataTable dt)
        {

            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.Buffer = true;
            Response.ContentType = "application/ms-excel";
            Response.Write(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">");
            Response.AddHeader("Content-Disposition", "attachment;filename= " + reportName + ".xls");
            Response.Charset = "utf-8";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250");

            StringWriter ws = new StringWriter();

            ws.Write("<font style='font-size:10.0pt; font-family:Calibri;'>");
            //       ws.Write("<BR><BR><BR>");
            //sets the table border, cell spacing, border color, font of the text, background, foreground, font height
            ws.Write("<Table border='1' bgColor='#ffffff' " +
               "borderColor='#000000' cellSpacing='0' cellPadding='0' " +
               "style='font-size:10.0pt; font-family:Calibri; background:white;'>");

            string strBoldCell = "<TD bgColor='#c9c7c3' style=\"font-weight: bold\">{0}</TD>";
            string strRedCell = "<TD style=\"background-color:#ff4d4d\">{0}</TD>";
            string strCell = "<TD>{0}</TD>";
            string strColSpan = "<TD colspan={0} style=\"font-weight: bold\">{1}</TD>";

            int r;
            int c;

            if (dt.Rows.Count > 0)
            {
                try
                {
                    ws.Write("<TR>");
                    for (c = 0; c < dt.Columns.Count; c++)
                    {
                        ws.Write(string.Format(strBoldCell, dt.Columns[c].ColumnName).Replace("_", "&#8204;"));
                    }
                    ws.Write("</TR>");
                    ws.Write("\n");

                    for (r = 0; r < dt.Rows.Count; r++)
                    {

                        ws.Write("<TR>");
                        for (c = 0; c < dt.Columns.Count; c++)
                        {
                            if (string.IsNullOrEmpty(dt.Rows[r][dt.Columns[c].ColumnName].ToString()) == false)
                            {


                                if (dt.Rows[r]["Comment"].ToString() != null && dt.Rows[r]["Comment"].ToString() != "")
                                {
                                    ws.Write(string.Format(strRedCell, dt.Rows[r][dt.Columns[c].ColumnName].ToString().Replace('_', ' ')));
                                }
                                else
                                {
                                    ws.Write(string.Format(strCell, dt.Rows[r][dt.Columns[c].ColumnName].ToString().Replace('_', ' ')));
                                }
                            }
                            else
                            {
                                if (dt.Rows[r]["Comment"].ToString() != null && dt.Rows[r]["Comment"].ToString() != "")
                                {
                                    ws.Write(string.Format(strRedCell, " "));
                                }
                                else
                                {
                                    ws.Write(string.Format(strCell, " "));
                                }
                            }

                        }
                        ws.Write("</TR>");
                        ws.Write("\n");
                    }

                }
                catch (Exception ex)
                {

                    throw ex;
                }

            }

            else
            {
                ws.Write("<Tr>");
                ws.Write(string.Format(strColSpan, 10, "No records found"));
                ws.Write("</Tr>");
            }

            ws.Write("</Table>");
            ws.Write("</Font>");


            Response.Write(ws.ToString());
            Response.Flush();
            Response.End();

        }

通过如下在主方法中调用上述方法

                if (Cnt != 0)
                {
                    TempData["Error"] = "There were issues with the Excel Import: Total Records: " + result.Rows.Count+" Error Row Count: "+Cnt;
                }
                else
                {
                    TempData["Error"] = "No error found in given excel: Total Records: " + result.Rows.Count;
                }
                GenerateExcel("OutputFile" + DateTime.Now.ToString("MMddyyyyhhmmss"), result);
                return View();

也试图通过Tempdata进行查看,但是问题是excel生成成功,但是tempdata在视图中未显示任何内容。如果我评论调用GenerateExcel方法tempdata的代码在视图上完美显示。为什么会这样?

c# asp.net excel asp.net-mvc viewbag
1个回答
0
投票

请在设置临时数据之前尝试移动调用函数,例如:

GenerateExcel("OutputFile" + DateTime.Now.ToString("MMddyyyyhhmmss"), result);
if (Cnt != 0)
            {
                TempData["Error"] = "There were issues with the Excel Import: Total Records: " + result.Rows.Count+" Error Row Count: "+Cnt;
            }
            else
            {
                TempData["Error"] = "No error found in given excel: Total Records: " + result.Rows.Count;
            }
            return View();
© www.soinside.com 2019 - 2024. All rights reserved.