MVC控制器响应属性上的NullPointer



我正在尝试将数据置从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();
}

并在每次使用此方法时传递当前折扣。

最新更新