ASP.Net 返回 CSV 的表单提交

本文关键字:表单提交 CSV 返回 Net ASP | 更新日期: 2023-09-27 18:33:30

我在点击提交时无法让我的 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 中的空Page_Load函数上放置断点.aspx.cs VS 确实会在那里中断。除此之外,在表单提交时跳过调试写入行处的断点,并再次返回同一页面。

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

ASP.Net 返回 CSV 的表单提交

我找到了一个很好的解决方法,它返回了一个.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 请求)。