我在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;
}
}
}