【发布时间】:2009-02-02 19:07:30
【问题描述】:
我想在我们的网站上使用Thickbox(或其中一种)来显示从服务器返回的信息消息。示例包括从业务逻辑返回的警告消息等。
首先需要此功能的地方是 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>
目前,我在 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 包含消息中的某些内容。如果我可以执行一行 JavaScript 来更新隐藏消息或设置隐藏消息 DIV 的内容 BEFORE 调用 showMessage(),我想我们会很高兴。
thickbox 插件使用 JQuery,Lightview 使用原型和脚本。 Lightview 更漂亮——更好的图像、动画等。我不在乎哪个。
我正在使用 .NET 中内置的 AJAX (Atlas) 框架。
【问题讨论】:
标签: jquery ajax asp.net-ajax thickbox