1
<script type="text/javascript">

    function ClientSideClick(myButton) {
        //make sure the button is not of type "submit" but "button"
        if (myButton.getAttribute('type') == 'button') {
            // disable the button
            myButton.disabled = true;
            //myButton.className = "btn-inactive";
            myButton.value = "Posting...";
        }
        return true;
    }

</script>



<asp:UpdatePanel ID="upComments" runat="server" UpdateMode="Always" >
    <ContentTemplate>

        <asp:ListView ... >

            <asp:Button ID="btnSubPostComment" runat="server" Text="Reply Comment"
                        CommandName="cmdPostSubComment" OnClientClick="ClientSideClick(this)" UseSubmitBehavior="false"

        </asp:ListView>

    </ContentTemplate>
</asp:UpdatePanel>

Javascript 函数 (ClientSideClick) 在处理时禁用按钮。

问题是,当我在按钮中包含 OnClientClick="ClientSideClick" UseSubmitBehavior="false" 时,即使它位于更新面板内,它也会导致完整的回发。

如果我删除这两个属性 OnClientClic 和 UseSubmitBehavior 按钮不会导致完全回发。有谁知道为什么会这样?

我想要做的就是禁用按钮并更改它的文本以防止多次提交。

4

1 回答 1

1

我不确定这是否正是您正在寻找的,但我通常使用这个:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
var pbControl = null;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);

function BeginRequestHandler(sender, args) {
    pbControl = args.get_postBackElement();
    pbControl.disabled = true;
}
function EndRequestHandler(sender, args) {
    pbControl.disabled = false;
    pbControl = null;
}
</script>
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:ListView ... >
            <asp:Button ID="btnSubPostComment" runat="server" Text="Reply Comment" CommandName="cmdPostSubComment" OnClientClick="this.value='Posting...';" />
        </asp:ListView>
    </ContentTemplate>
</asp:UpdatePanel>

唯一的问题是,如果在第一次异步回发后再次单击相同的按钮,则会引发“由于对象的当前状态,操作无效”错误。这可能会以 500 内部服务器错误的形式显示为 javascript 异常。经过一番研究,我发现:

“微软最近(2011 年 12 月 29 日)发布了一个更新,以解决 .NET 框架中的几个严重安全漏洞。MS11-100 是最近才推出的,用于处理潜在的 DoS 攻击。不幸的是,该修复程序还破坏了非常大量的页面 POST发布的数据(表单字段)。MS11-100 对回发项目设置了 500 个限制。最近的安全更新引入的新默认最大值是 1000。

Scott Gu 在这里写到:http ://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx

将设置键添加到 web-config 文件可以克服此错误:

<appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="2000" />
</appSettings>
于 2013-01-15T15:05:54.663 回答