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

C# 回发asp.net后无法禁用按钮,c#,javascript,jquery,asp.net,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.

我正在尝试创建一个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满足要求,请向我推荐一个解决方案。

这非常简单!

刚刚添加了
OnClientClick=“$(this).attr('disabled','disabled');返回true;”

上述措施应该有效

它是干什么的?
当用户单击按钮时,JavaScript将禁用客户端上的按钮,并返回true,允许回发并运行为OnClick(btnDownload_Click)指定的事件处理程序。

您的按钮被启用,因为页面可能由于回发事件而重新加载

当触发btnDownload_click事件时,您需要在某些会话中设置一个标志=1,然后在页面_load event上检查该标志值以将btnDownload.enabled属性设置为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"];
    }
}

对我来说,如果您使用的是
Webform
,并且没有禁用
Viewstate
,则页面将使用其中包含的数据对页面上的控件进行重新水化,因此如果您禁用了按钮,则在回发后应保持禁用状态

您的页面加载或页面加载调用的另一个函数中是否有可能重新启用回发按钮的内容?@mason否我没有在页面加载中添加任何代码虽然我同意在大多数情况下使用JavaScript禁用它应该有效,但OP了解ASP.NET页面生命周期很重要,这可能解释了为什么他的代码没有按预期工作。如果他的回发重新启用了按钮,那么在客户端禁用它不会有任何好处。@mason同意你的看法。我尝试了一些类似于上面javascript的东西,按钮仍然处于启用状态。我不确定你为什么要这样做,而只是检查Page_Load中是否有东西正在启用按钮。这是非常复杂且不必要的。msm8bball,在page_load事件中,不必有“某物”启用按钮。如果由于回发而加载页面,则所有控件状态都将重置为其默认状态。否,回发时控件不会重置为其默认状态,这就是ViewState存在的原因。我猜Rahul在Page_Load中有什么东西导致每次回发时按钮都被重新启用。我同意你的说法,但不清楚viewstate是否确实被启用。@Rahul:我认为,在文件下载后,你的页面被重新加载,因此,你的按钮控制状态被重置(启用)。正如我在上面的回答中提到的,当单击下载按钮时,您需要设置一个标志,并且在页面加载事件中,检查是否设置了标志。基于此,您可以将下载按钮状态设置为启用或禁用。
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"];
    }
}