NullPointer on MVC Controller Response属性

时间:2014-03-07 22:33:03

标签: c# asp.net-mvc excel export-to-excel

我正在尝试从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");
    }

1 个答案:

答案 0 :(得分:2)

您可以更改方法以将HttpContext传递给它:

public ActionResult ExportFromDB(HttpContext context, string sqlQuery)
{
    //...
    context.Response.Clear();
}

每次使用此方法时都会传递当前的提示。