【问题标题】:How would one disable an ASP.NET WebForms button when its clicked, and have it be enabled again after postback completes?如何在单击时禁用 ASP.NET WebForms 按钮,并在回发完成后再次启用它?
【发布时间】:2014-07-25 15:32:39
【问题描述】:

我想做的是能够在按下按钮后立即禁用它,执行操作并重新启用该按钮。看起来很简单,但我的按钮在我需要时不会更新。我尝试了一个更新面板,但我不确定我是否正确使用它。难道我做错了什么?还是有更好的方法来实现这一点?

HTML

<asp:UpdatePanel runat="server" ID="updateSubmitButton">
    <ContentTemplate>
        <a href="#resultsSet"><asp:Button ID="btnSearch" CssClass="CrossoverButton" runat="server" Text="Search" OnClick="btnSearch_Click" /></a>
    </ContentTemplate>
</asp:UpdatePanel>

C#

protected void btnSearch_Click(object sender, EventArgs e)
{
    btnSearch.Enabled = false;
    updateContent();

    // Do a lengthy operation here.

    btnSearch.Enabled = true;
}

【问题讨论】:

    标签: c# asp.net user-interface background-process


    【解决方案1】:

    您需要使用客户端技术来禁用该按钮。这是因为当您单击按钮时,页面会向自身发送回帖,告诉服务器执行btnSearch_Click。根据您的代码,这将

    1. 禁用按钮
    2. 更新内容
    3. 重新启用按钮

    所有这些都发生在服务器上。只有在方法执行完毕后,才会将上下文返回给页面。

    为了禁用单击按钮,您需要尝试以下操作:

    <asp:Button ID="btnSearch" CssClass="CrossoverButton" runat="server" Text="Search"
        OnClientClick="this.disabled = true;"
        UseSubmitBehavior="false" />
    
       OnClientClick="this.disabled = true;"
    

    此行注册客户端点击处理程序,以禁用自身。

       UseSubmitBehavior="false"
    

    这一行告诉 ASP.NET 在表单 post 中包含 disabled 元素,因此服务器知道哪个控件注册了 postback。

    另见 -- https://stackoverflow.com/a/11832053/86860

    【讨论】:

      【解决方案2】:

      btnSearch_Click 中的所有动作都将在服务器上执行。在整个页面生命周期结束之前,不会呈现页面。

      如果您想禁用该按钮,您应该使用 javascript 来执行此操作,然后仅在禁用该按钮后才回发到页面。

      【讨论】:

      • pre_init 代码也可以使用,但请查看页面生命周期,看看您可以在哪里实现您的逻辑,否则通过 java 脚本使用 __DoPostBack 方法
      • 如果您在服务器端禁用和启用按钮,您将不会在页面中看到它,因为您只有在渲染步骤之后才会得到响应,这是在页面生命周期的末尾
      • 我认为将控件放在 UPDatePanel 上会呈现部分回发
      猜你喜欢
      • 2016-07-15
      • 2012-06-11
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多