我正在尝试将数据置从MVC Web应用程序中导出到Excel电子表格中。我正在尝试使此方法"通用",因为来自多个Web应用程序的任何其他控制器(在同一解决方案中包含)都可以调用和使用它。我通过将其放置在仅用于此目的的单独控制器中来完成此操作。
当此方法嵌入功能控制器中时,它可以正常工作。但是,我在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");
}
您可以更改将HttpContext
传递给它的方法:
public ActionResult ExportFromDB(HttpContext context, string sqlQuery)
{
//...
context.Response.Clear();
}
并在每次使用此方法时传递当前折扣。