当由部分回发加载时,Jquery停止在Asp.net控件中工作

时间:2011-11-23 10:44:30

标签: c# jquery asp.net user-controls updatepanel

在ASP.net/C#应用程序中。 我正在使用更新面板和其中的占位符来动态加载控件

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click"/>
    </Triggers>
    <ContentTemplate>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server">
        </asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>

当我点击LinkBut​​ton1时,我在PlaceHolder中加载了一个用户控件:

protected void LinkButton1_Click(object sender, EventArgs e)
{
    PlaceHolder1.Controls.Clear();
    MyControl C;
    C = (MyControl1 )LoadControl("Controls/MyControl.ascx");
    PlaceHolder1.Controls.Add(C);
}

我所拥有的所有控件都正确加载。

但问题是:

我有一个控件,当我点击div时,使用Javascript和Jquery创建一个下拉动画。 通过Normal PostBack加载到页面上时,此控件可正常工作 但是当我在更新面板中使用部分回发加载它时,它会加载但javascript停止工作(不再下拉动画和其他东西)

如何通过部分回发加载控件时使它们工作?

4 个答案:

答案 0 :(得分:1)

我认为使用Jquery“Live”可能是您需要的答案,这将监控DOM的变化。

$(“{YOURQUERY}”)。live(“click”,function(){alert(“Goodbye!”);});

查看jquery文档以获取更多信息。

答案 1 :(得分:0)

我认为您的动画正在$(document).ready()事件中注册。然后它注册所有div,特定的动画。 如果您对updatepanel进行回发,则不会触发文档就绪事件,因此会注册动画。您应该在更新面板中回发后再次自己完成。

答案 2 :(得分:0)

我的猜测是你的动画下拉是在dom准备就绪时执行的。因此,您的初始页面加载会在下拉列表中的任何位置设置动画。

使用部分帖子返回其唯一加载的部分,因此未设置动画。因为它不是最初准备好的Dom的一部分。

您需要在返回该部分帖子时触发一些javascript,以运行您可能需要设置动画的相同功能。

修改

How to control which JavaScript gets run after UpdatePanel partial postback endRequest?

应该在更新面板返回后帮助您执行javascript。

答案 3 :(得分:0)

当你执行.bind()时,你只在给定时刻连接DOM中存在的元素的事件,即执行.bind()时。您通过部分回发异步加载的控件在document.ready中不存在,这就是您的事件不起作用的原因。

你应该使用live或delegate,或者更好的是,如果你使用的是jQuery 1.7或更高版本,你应该使用新的on-function

$(function(){
    $('placeholder-selector').on('click' , 'your-clickable-selector', function(){
        //do your animation here
    });
});