【发布时间】:2017-12-10 15:17:52
【问题描述】:
我想在我的程序中执行一些操作。 在运行这些操作时,我想告诉客户这些操作正在进行中。 在此过程结束后,我想将此文件发送给客户端,例如 Excel 文件。 我最小化我的项目以准确显示问题所在
现在,这是我的问题: Button1 不工作,而 Button2 工作正常,为什么?以及如何解决这个问题? 也许有更好的解决方案?
这是我的 aspx clint 代码:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Height="38px" onclick="Button1_Click" Text="Button" Width="167px" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
The report is creating please wait...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
</form>
接下来是我的代码
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{}
protected void Button1_Click(object sender, EventArgs e)
{
Thread.Sleep(5000);
sendBackToUser();
}
protected void Button2_Click(object sender, EventArgs e)
{
sendBackToUser();
}
private void sendBackToUser()
{
FileInfo file = new FileInfo(@"C:\F\f.xlsx");
if (file.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=" + @"C:\F\f.xlsx");
Response.AddHeader("Content-Type", "application/Excel");
Response.ContentType = "application/vnd.xlsx";
Response.AddHeader("Content-Length", file.Length.ToString());
Response.WriteFile(file.FullName);
Response.End();
}
else
{
Response.Write("This file does not exist.");
}
}
}
【问题讨论】:
-
如果您在
Button1_Click事件中设置断点,代码是否到达? -
是的。这两者都从头到尾
-
是 5 秒的等待导致它崩溃吗?你说它不起作用到底发生了什么? (你有错误消息,异常,它只是冻结?)
-
在 Button1_Click 上它只等待 5 秒,运行整个 sendBackToUser();到达 Button1_Click 的 },完成并没有任何反应但是在 Button2_Click 上,当它结束时,它让我下载 Excel 文件
-
@AntoinePelletier 之前遇到过同样的问题,我认为问题在于 UpdatePanel 只进行了部分回发,因此 OP 将看到发生的事情,从字面上看,什么都没有。看起来按钮根本没有被点击