回发asp.net后无法禁用按钮

时间:2014-02-27 14:56:11

标签: c# javascript jquery asp.net

我正在尝试创建一个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满足会议要求,也可以给我一个解决方案。

3 个答案:

答案 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"];
    }
}