我正在尝试从MVC网络应用程序将DataTable导出到Excel电子表格中。我试图使这种方法“通用”,因为来自多个网络应用程序(包含在同一个VS解决方案中)的任何其他控制器都可以调用和使用它。我把它放在一个单独用于此目的的控制器中。
当此方法嵌入在功能控制器中时,它可以正常工作。但是,我在Response.Clear()
函数上获得了NullPointerExceptions。是否可以在独立控制器中使用它,或者它是否必须在功能控制器中运行?
这是我的代码:
public ActionResult ExportFromDB(string sqlQuery)
{
DataTable dt = new DataTable();
using (OleDbConnection conn = connectionString)
{
OleDbCommand cmd = new OleDbCommand(sqlQuery, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
adapter.Fill(dt);
}
GridView GridView1 = new GridView();
GridView1.AllowPaging = false;
GridView1.DataSource = dt;
GridView1.DataBind();
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=DataTable.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//Apply text style to each Row
GridView1.Rows[i].Attributes.Add("class", "textmode");
}
GridView1.RenderControl(hw);
//style to format numbers to string
string style = @"<style> .textmode { mso-number-format:\@; } </style>";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
return RedirectToRoute("back to home controller");
}
答案 0 :(得分:2)
您可以更改方法以将HttpContext
传递给它:
public ActionResult ExportFromDB(HttpContext context, string sqlQuery)
{
//...
context.Response.Clear();
}
每次使用此方法时都会传递当前的提示。