【问题标题】:OnClientClick is stopping postbackOnClientClick 正在停止回发
【发布时间】:2012-12-21 04:16:41
【问题描述】:

我有一组 ASP.NET 控件:

<asp:LinkButton ID="Find"
    ClientIDMode="Static"
    runat="server"
    CausesValidation="true"
    OnClientClick="$('#Find').attr('disabled', 'disabled'); $('#SearchingLabel').show();">
    <span>Search</span>
</asp:LinkButton>
<asp:Label ID="SearchingLabel"
    ClientIDMode="Static"
    runat="server"
    Text="Searching..."
    style="display: none;" />

如您所见,我正在使用OnClientClick,这样我就可以禁用Find 按钮并显示SearchingLabel并且JavaScript 可以正常工作,顺便说一句)。很基本的东西。

此外,围绕CausesValidation 属性,我确实在页面上有验证控件,但没有当前的验证错误。

但是,即使我没有从 JavaScript 返回false,页面也没有发回。我什至尝试过return true;,但这并没有改变任何东西(并不令人惊讶,但值得一试)。

期待您的反馈!

【问题讨论】:

  • CausesValidation="true"?你的页面上有 ValidationControls 吗?那些可能会导致它
  • @codingbiz,我在页面上有验证控件,但是没有验证错误。
  • 如果您删除了要回发的控件或控件的父控件,也会发生这种情况,OnClientClick="$(this).remove()" 之类的内容会导致同样的问题。

标签: c# javascript asp.net .net


【解决方案1】:

您似乎在回发之前禁用了按钮。

您可以尝试不使用禁用部分的页面/脚本:

OnClientClick="$('#SearchingLabel').show();"

如果可行,请稍等片刻尝试:

OnClientClick="setTimeout(function() { $('#Find').attr('disabled', 'disabled'); }, 100); $('#SearchingLabel').show();"

【讨论】:

  • 好的,所以删除disabled jQuery 工作并导致它再次回发。但是,setTimeout 会导致意想不到的副作用,因为不仅按钮永远不会禁用(例如,如果我在服务器端放置 Thread.Sleep 5 秒)而且SearchingLabel 不会显示 即使我将该行放在 setTimeout 之前。
  • 我没有看到这个...你纠正了我在代码中的错字吗?我输入了“功能”而不是“功能”,将编辑我的答案。
  • 就是这样。现在就像一个魅力!
【解决方案2】:

试试这个 js 代码 onload

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
function BeginRequest(sender, e) {
    e.get_postBackElement().disabled = true;
    // or your code

}
function EndRequest(sender, e) {
   .......
}

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多