0

我无法让我的 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 项目中可能发生了什么导致它不起作用吗?

4

2 回答 2

0

首先,您应该使用Fiddler通过 HTTP 调试问题,为什么不使用Response.TransmitFile()呢?

有几件事可以帮助:

  • 你确定Debug.WriteLine()没有执行?
  • 您是否尝试过在那里设置断点?
  • 您是否在调试模式下编译?
  • 调试时是否打开了不止一次的 IE 实例,因为这已经让我失望了几次
于 2012-05-07T22:05:49.853 回答
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 请求) 区分开来。

于 2012-05-08T17:27:17.457 回答