返回CSV的ASP.Net表单提交

时间:2012-05-07 22:00:40

标签: c# asp.net

我无法让我的ASP.Net页面在点击提交时返回CSV。这是我在Form.aspx中提交按钮的asp按钮定义:

<asp:Button id="submitreport" name="submitbutton" text="submit" OnClick="Report_Submit" runat="server" />

这是Form.aspx.cs中的相应函数:

public void Report_Submit(object sender, EventArgs e) {
    Debug.WriteLine("GETS HERE?");
    Response.Charset = "UTF-8";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetAllowResponseInBrowserHistory(true);
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "attachment; filename='" + DateTime.Today.ToString() + ".csv'");
    Response.Write("test,output");
    Response.End();
}

在Visual Studio中运行时,我甚至看不到调试打印行。有人知道我的设置有什么问题吗?

编辑:我确定页面设置正确,因为如果我在Form.aspx.cs中的空Page_Load函数上放置一个断点,VS确实在那里打破了。除此之外,在表单提交中跳过调试写入行的断点,并再次返回相同的页面。

更新通过仅使用按钮和处理程序创建新项目,将调用Report_Submit()函数并正确生成CSV文件。由于这缩小了一点点,有没有人知道在我的另一个VS 2008项目中可能会发生什么导致这不起作用?

2 个答案:

答案 0 :(得分:0)

首先,您应该使用Fiddler来调试HTTP上的问题,为什么不使用Response.TransmitFile()

有几件事需要帮助:

答案 1 :(得分:0)

我发现了一个非常好的工作,返回一个.csv文件(也不应该在我的标题创建函数调用中引用,但这不是问题)。此外,不应该指定一个名称,因为ASP.NET填充了该名称,但这也不是问题。

将相关的表单处理代码移动到自己的项目中工作得很好,但我的项目太大而无法管理。

我发现有用的解决方法是将按钮处理功能移到Page_Load()并使用:

if(Request.HttpMethod == "GET") {
    Debug.WriteLine("this is just a request for the page"):
}
else if(Request.HttpMethod == "POST") {
    Debug.WriteLine("processing the form");
    //rest of code...
}
else {
    //some HTTP action that doesn't matter
}

区分页面请求(GET)与进入表单的用户(POST请求)。