如何告诉BalloonPopupExtender禁用自身而不显示



我在ASP.NET/C#中有这个脚本-我试图控制何时显示气球弹出窗口,作为初步测试,我特别指示弹出窗口扩展程序在任何情况下都不要显示。

但它仍然会在点击时显示。。

如何告诉BalloonPopupExtender禁用它自己并且根本不显示?

(稍后我想让它再次显示,但这些信息只是为了完成我为什么首先要它在那里。)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:Panel ID="Panel1" runat="server">
            Balloon Information1
        </asp:Panel>
        <ajaxToolkit:BalloonPopupExtender ID="BalloonPopupExtender1" runat="server" BalloonPopupControlID="Panel1" TargetControlID="Label1" 
            DisplayOnClick="False" DisplayOnFocus="False" DisplayOnMouseOver="False"></ajaxToolkit:BalloonPopupExtender>
    </div>
    </form>
</body>
</html>

这是个好问题。由于引用中说TargetControlID是必需的,所以我唯一会尝试的就是动态创建BalloonPopupExtender控件。我可能会在那里放一个PlaceHolder,以确保有一个容易添加的地方。

不过,您需要一个要处理的事件来动态创建扩展器。但是您提到您想要控制何时显示它。

我认为这是AjaxControlToolkit中的一个错误。检查此文件:BalloonPopupExtenderBehavior.pre.js

如您所见,在initialize函数中,只有当_displayOnClick字段值为true时,才会向目标控件添加click事件处理程序。非常奇怪,因为您为必须保存到该字段的服务器属性指定了false。但如果您在这个扩展程序中检查下面的set_displayOnClick函数,您会发现从服务器发送的值保存到this.displayOnClick字段(没有前导下划线)。由于_displayOnClick字段具有默认值true(检查构造函数),因此无法在单击时关闭巴伦的显示。

您可以从Codeplex下载工具包源代码,修复此文件,重建解决方案并使用自定义工具包库。

为了快速修复脏问题,您可以在页面底部添加以下占位符位脚本:

<asp:PlaceHolder runat="server" ID="FixScripotPlaceholder">
    <script type="text/javascript">
        function disableBaloon() {
            var extender = $find("BaloonExtender");
            $removeHandler(extender.get_element(), "click", extender._clickHandler);
        }
        setTimeout(disableBaloon, 500);
    </script>
</asp:PlaceHolder>

为该占位符设置Visible="false",您将在从服务器代码单击时启用baloon。也可以通过javascript使用此脚本在点击时启用baloon:

function enableBaloon(){
    var extender = $find("Extender's BehaviorID");
    $addHandler(extender.get_element(), "click", extender._clickHandler);
}

谢谢你的回答,我很感激。

我找到了一个更简单的方法,并最终修改了如下代码,以控制气球的外观:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="d.TestPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        <asp:Panel ID="Panel1" runat="server">
            Balloon Information1
            <ajaxToolkit:BalloonPopupExtender ID="BalloonPopupExtender1" runat="server" BalloonPopupControlID="Panel1" TargetControlID="Label1" 
                DisplayOnClick="False" DisplayOnFocus="False" DisplayOnMouseOver="False"></ajaxToolkit:BalloonPopupExtender>
        </asp:Panel>
    </div>
    </form>
</body>
</html>

这是背后的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace d
{
    public partial class TestPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Panel1.Visible = !Panel1.Visible;
            //BalloonPopupExtender1.DisplayOnClick = false;
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新