Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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# 生成excel将清除viewbag/tempdata_C#_Asp.net_Excel_Asp.net Mvc_Viewbag - Fatal编程技术网

C# 生成excel将清除viewbag/tempdata

C# 生成excel将清除viewbag/tempdata,c#,asp.net,excel,asp.net-mvc,viewbag,C#,Asp.net,Excel,Asp.net Mvc,Viewbag,我正在尝试用以下代码生成excel public void GenerateExcel(string reportName, DataTable dt) { Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.Buffer = true; Re

我正在尝试用以下代码生成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();

        }

还试图将Tempdata传递给视图,但问题是excel正在成功生成,但Tempdata未在视图中显示任何内容。
如果我对调用GenerateExcel方法tempdata的代码进行注释,则该代码在视图中完全显示。为什么会出现这种情况?

请在设置tempdata之前尝试移动调用函数,如:

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();

您正在GenerateExcel方法中结束响应,并尝试在结束响应后返回视图。您需要更改方法。此方法是否异步并多次调用?
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();