我想在我们的网站上使用Thickbox(或其中一种)来显示从服务器返回的信息消息。示例包括从 biz 逻辑返回的警告消息等。
需要此功能的第一个地方是 asp:wizard 控件上的导航按钮。当用户尝试继续前进时,我们会验证他们的产品选择,并且可能会有我们需要显示的消息。
对于测试,由于我是 JQuery 和 Thickbox 的新手,我创建了一个测试页面。相关部分如下:
<asp:Panel runat="server" ID="pnl" Visible="false" style="display:none;background-color:Black;">
<div style="background-color:Black; width=300; height=200; ">
<asp:Label runat="server" ID="lblMessage" ForeColor="White" />
<script language="javascript" type="text/javascript">
function showMessage()
{
tb_show("Message", "#TB_inline?height=200&width=300&inlineId=<%# me.pnl.ClientID %>", null);
}
$(document).ready(function() { showMessage(); });
</script>
</div>
目前,我让Thickbox 在IE7 中显示,但它翻了一番。我将两个垂直的厚盒堆叠在一起,都有标题和关闭按钮,只有最上面的一个有我的内容。
在 Chrome 中,窗口的背景是灰色的,但没有可见的厚框窗口。
当我将整个内容包装在 AJAX UpdatePanel 中时,我什么也得不到。
我究竟做错了什么?
好的,所以更多信息。我已经得到了Thickbox 和另一个名为LightView 的工作。以下脚本块在页面中是静态的(Thickbox 版本):
<script type="text/javascript" language="javascript">
function showMessage(sender, args)
{
tb_show("Message", "#TB_inline?height=200&width=300&inlineId=ctl00_ctl00_cph1_cphMain_pnl", null);
}
function StartWatch() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(showMessage);
}
回发设置标签的文本,该文本位于对 tb_show 的调用中指定的 div 内。我知道在回发触发之前需要调用 prm.add_endRequest 调用。
有几个问题。首先,这其中有太多是硬连线的——页面中的 asp:panel 和标签、拼写出的 div 的 ID 等等。
我们真正想要的是能够以某种方式从后面的任何代码中调用它,例如:
Page.ShowMessage("Hello lightbox!")
我想我可以在母版页文件中包含一些脚本和一个 DIV。在被调用之前它将被隐藏。
但是,我需要能够:
a) 控制何时发生。并不是每个 AJAX 请求(事实上,大多数都不需要)在返回时都需要显示一条消息。因此,我要么不必调用 endRequest 方法,要么让 endRequest 方法检查从 AJAX 调用返回的内容以确定它是否真的需要调用 showMessage()。
b) 我需要找到一种方法让 UpdatePanel 包含消息中的某些内容。如果我可以在调用 showMessage()之前执行一行 JavaScript 来更新隐藏消息或设置隐藏消息 DIV 的内容,我想我们会很高兴。
厚盒插件使用 JQuery,Lightview 使用原型和脚本。Lightview 更漂亮——更好的图像、动画等。我真的不在乎哪个。
我正在使用 .NET 中内置的 AJAX (Atlas) 框架。