我正在尝试创建一个Web应用程序,其中有一个按钮,如果我单击该按钮,则会下载指定的文件,并且按钮应该被禁用。我使用以下代码
protected void btnDownload_Click(object sender, EventArgs e)
{
btnDownload.Enabled = false;
string filepath = @"D:\SomeLayout.pdf";
string filename = Path.GetFileName(filepath);
Stream stream = null;
try
{
stream = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.Read);
long bytesToRead = stream.Length;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
while (bytesToRead > 0)
{
if (Response.IsClientConnected)
{
byte[] buffer = new Byte[10000];
int length = stream.Read(buffer, 0, 10000);
Response.OutputStream.Write(buffer, 0, length);
Response.Flush();
bytesToRead = bytesToRead - length;
}
else
{
bytesToRead = -1;
}
}
}
catch (Exception ex)
{
}
finally
{
if (stream != null)
{
stream.Close();
}
}
}
单击按钮后,文件已下载但按钮仍保持启用状态。我试过从其他方法调用所有下载代码,但同样的问题发生。但是,如果我删除这些代码以便下载,那么在单击按钮后它将变为禁用状态。我不确定问题的原因,请帮助我找到解决方案。
我使用的asp.net按钮
<asp:Button ID="btnDownload" runat="server" Text="Download" OnClick="btnDownload_Click"/>
即使java脚本/ jquery满足会议要求,也可以给我一个解决方案。
答案 0 :(得分:0)
<asp:Button ID="btnDownload" runat="server" Text="Download" OnClick="btnDownload_Click" OnClientClick="$(this).attr('disabled','disabled');return true;"/>
刚刚添加了OnClientClick="$(this).attr('disabled','disabled');return true;"
上述情况应该有效。
当用户单击该按钮时,JavaScript将禁用客户端上的按钮,并返回true以允许回发发生并运行为OnClick指定的事件处理程序(btnDownload_Click)。
答案 1 :(得分:0)
如果您使用的是Webform
并且未禁用Viewstate
,则该页面会使用包含它的数据来重新水化页面上的控件,因此如果您禁用了某个按钮,它应该保持禁用状态回发后。
答案 2 :(得分:-1)
您的按钮已启用,因为该页面可能因回发事件而重新加载。
当你的btnDownload_click事件被触发时,你需要在某个会话中设置一个flag = 1,然后在Page_load事件上检查这个标志值,将btnDownload.enabled proprty设置为false。
protected void btnDownload_Click(object sender, EventArgs e)
{
Session["btnDownload-F9FA7686-319E-4185-A089-17FCC4FDECC1"] = 1;
}
protected void Page_Load(object sender, EventArgs e)
{
if(null != Session["btnDownload-F9FA7686-319E-4185-A089-17FCC4FDECC1"])
{
btnDownload.Enabled = !(bool)Session["btnDownload-F9FA7686-319E-4185-A089-17FCC4FDECC1"];
}
}