用户控件中的jquery是动态创建的

时间:2014-07-20 19:12:24

标签: javascript jquery asp.net ajax user-controls

我创建了一个User Control我有一个按钮。单击此按钮时,将执行jquery函数。 jquery函数位于User Control页面内。

现在我正在尝试在UpdatePanel内的页面中动态添加此用户控件。 问题是我的按钮无效。

在我谷歌之后,我发现问题可能是在ajax UpdatePanel中使用jquery。每次异步回发后,jquery脚本都会丢失。所以我的想法是在每个asyn回发中重新绑定我的jquery函数。但是在我找到的所有答案中,他们有点假设脚本管理器处于用户控制之下,而不是我的情况。

这里是我的jquery fucntion

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#<%= idButtonLeft %>").bind("click", function () {
            var options = $("#<%= idListDestinataire %> option:selected");
            for (var i = 0; i < options.length; i++) {
                var opt = $(options[i]).clone();
                $(options[i]).remove();
                $("#<%= idListSource %>").append(opt);
            }
        });
        $("#<%= idButtonRight %>").bind("click", function () {
            var options = $("#<%= idListSource %> option:selected");
            for (var i = 0; i < options.length; i++) {
                var opt = $(options[i]).clone();
                $(options[i]).remove();
                $("#<%= idListDestinataire %>").append(opt);
            }
        });
    });



</script>

动态添加我的用户控件的代码

     Dim CListBox As UserControl = LoadControl("DragDropList.ascx")
        CListBox.ID = "CListBox" + i.ToString()
        CType(CListBox, DragDropList).idListSource = "ListLeft" + i.ToString()
        CType(CListBox, DragDropList).idListDestinataire = "ListRight" + i.ToString()
        CType(CListBox, DragDropList).idButtonLeft = "idButtonLeft" + i.ToString()
        CType(CListBox, DragDropList).idButtonRight = "idButtonRight" + i.ToString()

        UpdatePanel1.ContentTemplateContainer.Controls.Add(CListBox)
        Panel1.Controls.Add(CListBox)

在我的页面中我有这个

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
                    <ContentTemplate>
                        <asp:Panel ID="Panel1" runat="server">
                        </asp:Panel>

                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="ImageButton1" />
                    </Triggers>
                </asp:UpdatePanel>
    <asp:ImageButton ID="ImageButton1" ImageAlign="Right" EnableViewState="false" ImageUrl=".\image\ajouter.png"  runat="server"  AlternateText="Ajouter" OnClick="AjouterC"/>

所以请任何想法提供帮助。 谢谢

当我在PostBackTrigger上更改了触发器时,它正在工作,但我希望它在asynchrone回发中。并且仍然不知道为什么它不起作用!

1 个答案:

答案 0 :(得分:0)

使用此

<script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        function EndRequestHandler(sender, args) {
            if (args.get_error() == undefined) {
                $(function () {
                    //Your script
                });
            }
        }
</script>

这将适用于您的更新面板提供给您的回复。