MVC Controller Response属性上的NullPointer

我想从一个MVC的Web应用程序导出到Excel电子表格的DataTable。 我试图让这种方法是“通用的”,因为来自多个Web应用程序(包含在同一个VS解决scheme中)的任何其他控制器都可以调用和使用它。 我已经把它放在一个专门用于这个目的的单独的控制器中。

当这个方法被embedded到一个function控制器中时,它工作正常。 但是,我得到的Response.Clear()函数NullPointerExceptions。 是否有可能得到这个工作在独立的控制器,或将不得不在一个function控制器内运行?

这是我的代码:

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

每次使用这种方法时都要传递当前的信息。