嗯,这个问题似乎有点令人困惑。
一方面我有一个Update Panel
.在这个Update Panel
里面,我有一个Modal Popup Extender
,这个弹出窗口的内容是一个Web User Control
。
在我的User Control
中,我试图包含一个画廊滑块(http://bxslider.com/),必须简单地用JavaScript行初始化:
$(document).ready(function() {
$('.bxslider').bxSlider();
}
,其中.bxslider
是在其中定义库幻灯片的容器的类。
浏览 Web,当我单击启动弹出窗口的控件时,它会显示库控件(上一个、下一个和页脚栏,其中包含许多圆圈,代表库的每个幻灯片),但我无法看到库本身的内容。
现在,如果我访问Chrome控制台,就会神奇地渲染图库。
我尝试将初始化放在几个地方:
在
Web User Control
标记文件中,在开头。在
Web User Control
标记文件中的末尾。在
Web User Control
Load
事件中:protected void Page_Load(object sender, EventArgs e) { String script = "$(document).ready(function() { $('.bxslider').bxSlider(); }"; ScriptManager.RegisterStartupScript((Control)this.Page, this.Page.GetType(), new Guid().ToString(), script, true); }
在
Web User Control
LoadComplete
事件(通过Init
事件绑定)中:protected void Page_Init(object sender, EventArgs e) { this.Page.LoadComplete += new EventHandler(Page_LoadComplete); } protected void Page_LoadComplete(object sender, EventArgs e) { String script = "$(document).ready(function() { $('.bxslider').bxSlider(); }"; ScriptManager.RegisterStartupScript((Control)this.Page, this.Page.GetType(), new Guid().ToString(), script, true); }
在
Modal Popup Extender
OnLoad
事件中。
我完全迷失了。有什么想法吗?
编辑:我认为这里的正确问题是:有没有办法建立一种方法,该方法仅在显示Modal Popup Extender
而不是加载时引发?
嗯,终于解决了。
解决方案是将模态弹出窗口的TargetControlID
分配给虚拟按钮,然后将我真正想要打开弹出窗口的控件声明为:
<asp:Button id="Button1" runat="server" OnClientClick="$find('PopupBehaivourID').show(); setTimeout(function () { $('.bxslider').bxSlider(); }, 100); return false;" Text="Show me!" />
这以一种"肮脏"的方式解决了问题,所以,如果有人有其他建议,将非常欢迎。
新方法!
相反,上一个在每次打开弹出窗口时重新定义滑块(导致其他问题),我直接在User Web Control
中初始化滑块:
<script type="text/javascript">
var slider;
$(document).ready(function () {
slider = $('.bxslider').bxSlider();
</script>
然后启动弹出窗口的控件显示为:
<asp:Button id="Button1" runat="server" OnClientClick="$find('PopupBehaivourID').show(); slider.reloadSlider(); return false;" Text="Show me!" />
即,我现在使用一种每次重新加载图库的方法。