C# 如何防止用户单击';s在ASP.NET Webforms中的gridview中多次启动文件下载?

C# 如何防止用户单击';s在ASP.NET Webforms中的gridview中多次启动文件下载?,c#,javascript,asp.net,gridview,C#,Javascript,Asp.net,Gridview,我在gridview中有类似的内容: <asp:TemplateField> <ItemStyle /> <ItemTemplate> <asp:ImageButton ID="btnDownloadHidden" Enabled="false" runat="server" CommandName="ScaricaDocHidden" style="display:none" CommandArgument='<%#Ev

我在gridview中有类似的内容:

<asp:TemplateField>
<ItemStyle />
<ItemTemplate>
    <asp:ImageButton ID="btnDownloadHidden" Enabled="false" runat="server" 
        CommandName="ScaricaDocHidden" style="display:none" CommandArgument='<%#Eval("ID_MODULO") %>' />
    <asp:ImageButton ID="btnDownload" Enabled="true" runat="server" 
        CommandName="ScaricaDoc" OnClientClick="disable()" CommandArgument='<%#Eval("ID_MODULO") %>' />
</ItemTemplate>
现在,我必须在哪里执行enable函数才能让它工作?我已经看到过这样的帖子:

但是我试过了,没有用,也用了return-false;或者使用submitbehavior=“false”,所以我决定使用另一个已经禁用的按钮,正如我在另一篇文章中看到的那样。但我只是不知道如何重新启用它

更新:

我看到了这一点:现在我所有的下载代码都在ashx上,我不需要再回发来下载文件了,这真的很好,因为整个页面都很重。现在我的javascript是这样的:

function disable() {
    var imageBtn = $('.js-image-button');
    //WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(imageBtn.attr('name'), "", true, "", "", false, true));
    alert('disable');
    imageBtn.attr('disabled', true);
    window.location = 'DownloadPDF.ashx';
    //alert('enable');
    //imageBtn.removeAttr('disabled') 
}
但问题仍然存在,有没有一种方法可以在下载完成后使用javascript启用按钮

更新2:

我看到了:

这是:

因此:

这在不使用h.ashx的情况下也有效,再次使用带有选项的WebForm_doPostback而不是window.location。当生成文件并显示broweser弹出窗口时,按钮处于启用状态,而不是在下载完成时,但已经足够好了

更新3


它在firefox上不起作用,它总是给我readyState='interactive'

我想你是在回发帖子,想在下载文档时阻止进一步的点击

你可以试着让它简单一点。留下一个按钮,给它一个你可以选择的类名,我假设在一个网格中,会有多个下载按钮

您应该能够通过设置disabled属性来禁用单击按钮

此处的示例(尝试多次单击按钮):


仍然假设这是回发场景,一旦服务器响应客户端,按钮应重置为正常状态。

如果禁用该按钮的
单击导致了
回发
,您可以在页面加载时重新启用它。是的,单击它会导致回发,但它会首先通过页面加载,而我必须在gridView_row命令中禁用它。是的,这正是我要做的。这都在UpdatePanel中,但在页面加载中,我在GridView上使用scriptManager.RegisterPostBackControl,因此它会导致回发,但如果我使用Javascript函数将disabled设置为true,即使是第一次,也不会,我无法下载…好的,我看到在点击imagebutton生成的HTML上有WebForm_-DoPostBackWithOptions(新WebForm_-PostBackOptions(“ctl00$Main Content$ucCheckList$tabContainerCheckList$TabPanelDocumenti$TabDocumenti$grdDocumentsIstruttoria$ctl02$Btncariadoc”、“”、true、“”、false、false)),所以现在把WebForm_-DoPostBackWithOptions放在一起(新的WebForm_PostBackOptions(imageBtn.attr('name'),“”,true,“”,false,true));在将disabled设置为true之前,它正在工作..但当返回到客户端时,它仍然没有重置为正常状态..所以现在这似乎是真正的问题:环顾四周,似乎我可以使用.ashx进行下载..这是对的?有人已经使用过它,可以帮助我?可能没有通过querystrin传递参数g?P.S.我认为这个答案很有用,但我没有足够的声誉去做这件事。。
function disable() {
    alert('disable');
    var btn = $("input[type='image']");
    var hdn = $("input[name$='DownloadHidden']");
    var btn = $("input[name$='btnDownload']");
    btn.css('display', 'none');
    hdn.css('display', 'block');
}

function enable() {
    alert('enable');
    var btn = $("input[type='image']");
    var hdn = $("input[name$='DownloadHidden']");
    var btn = $("input[name$='btnDownload']");
    btn.css('display', 'block');
    hdn.css('display', 'none');

}
function disable() {
    var imageBtn = $('.js-image-button');
    //WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(imageBtn.attr('name'), "", true, "", "", false, true));
    alert('disable');
    imageBtn.attr('disabled', true);
    window.location = 'DownloadPDF.ashx';
    //alert('enable');
    //imageBtn.removeAttr('disabled') 
}
function disable() {
    var imageBtn = $('.js-image-button');
    //WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(imageBtn.attr('name'), "", true, "", "", false, true));
    //alert('disable');
    imageBtn.attr('disabled', true);
    window.location = 'Components/TabCheckList/DownloadPDF.ashx';
    checkLoad(); 
}

function checkLoad() {
    if (document.readyState === "complete") {
        var imageBtn = $('.js-image-button');
        //alert('enable');
        imageBtn.removeAttr('disabled')
    } else {
        setTimeout('checkLoad()', 1000);
    }
}