【问题标题】:Button in UpdatePanel requires two clicks to fireUpdatePanel 中的按钮需要单击两次才能触发
【发布时间】:2010-12-04 16:13:29
【问题描述】:

我正在使用带有 MS AJAX 的 VB.NET 和 Webforms。

我在 MS AJAX 更新面板中有一个按钮。加载页面时,按钮的可见性以声明方式设置为“false”。

在用户选中一个复选框(也在 UpdatePanel 中)后,我将按钮的可见性设置为 true,并且它按预期变为可见。

但是,用户必须点击按钮两次才能发生任何事情。第一次单击只是将焦点放在按钮上。需要再次单击才能使回发发生(视觉验证并带有断点)

知道为什么会这样吗?

非常感谢!

安东尼

【问题讨论】:

  • 页面是在第一次点击时返回,还是只在浏览器中获得焦点?

标签: asp.net ajax events button updatepanel


【解决方案1】:

您在页面上有动态显示的验证器吗?

如果显示验证器并且您在按钮上按下鼠标,验证器可以将按钮从鼠标下方推出,因此当您抬起手指时,您实际上不会触发点击事件。

如果是这种情况,您可以通过将验证器的显示属性设置为静态来解决此问题。

其他想法:

按钮的客户端 onclick、onmousedown、onmouseup 是否有任何 javascript 运行?

你是动态地把这个按钮添加到页面吗?

您是否将CheckBoxAutoPostBack 属性设置为TrueFalse?如果它设置为 true,那么当您单击该按钮时,您可能正处于异步回发的中间。

【讨论】:

  • 一定是第三方控件的javascript干扰。
【解决方案2】:

我在 IE6 和 Firefox 3.5 中对此进行了测试,对我来说效果很好。你的配置不一样吗?

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" Text="Checkbox" />
        <asp:Button ID="Button1" runat="server" Text="Button" Visible="False" OnClick="Button1_Click" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

protected void CheckBox1_CheckedChanged( object sender, EventArgs e )
{
    Button1.Visible = CheckBox1.Checked;
}

protected void Button1_Click( object sender, EventArgs e )
{
    Label1.Text = DateTime.Now.ToString();
}

【讨论】:

  • 感谢您的尝试。一定是第 3 方文件上传控件有所不同。
【解决方案3】:

大胆猜测:您是否在页面的 Init 或 Load 阶段检查复选框的值?由于页面循环,复选框控件将尚未设置其重新发布的值,并且将显示为未选中。只有在第二次回发时,您的代码才能正确看到检查状态(从视图状态加载)并显示按钮。

在复选框 Change 事件或 PreRender 中设置可见性。

【讨论】:

    【解决方案4】:

    感谢您的意见。

    我在 UpdatePanel 中有一个 3rd Party File Upload control 以及按钮,这似乎会导致与按钮发生冲突。

    我已求助于用 javascript 解决问题。我在页面顶部附近添加以下方法:

    <script language="javascript" type="text/javascript">
        function DisplayImportButton() {
            document.getElementById('<%= btnImport.ClientId %>').style.visibility = "visible";
        }
    </script>
    

    我将以下内容添加到页面底部,因此按钮始终在开始时隐藏:

    <script language="javascript" type="text/javascript">
        var elem;
    
        elem = document.getElementById('<%= btnImport.ClientId %>');
    
        if (elem) {        
            elem.style.visibility = "hidden";
        }
    </script>
    

    在我添加的复选框选中状态更改的处理程序中:

    ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "ImportButtonScript", _
            "DisplayImportButton();", True)
    

    亲切的问候

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 2014-08-08
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多