Выполнять JavaScript из внутренней панели обновлений при каждом обновлении - PullRequest
8 голосов
/ 17 мая 2011

У меня есть страница aspx, которая состоит из 3 пользовательских элементов управления (ascx).У меня есть панель обновления, обертывающая 3 пользовательских элемента управления следующим образом:

<asp:UpdatePanel ID="UpdatePanelWrapper" runat="server">
    <ContentTemplate>
         <uc1:UserControl1 ID="UserControl1" runat="server" />        
         <uc2:UserControl2 ID="UserControl2" runat="server"/>
         <uc2:UserControl3 ID="UserControl3" runat="server"/>
    </ContentTemplate>
</asp:UpdatePanel>

Я показываю каждый пользовательский элемент управления отдельно, поэтому, когда отображается «UserControl1», остальные 2 пользовательских элемента управления скрыты.

Внутри "UserControl1" у меня есть некоторые элементы управления asp и некоторые функции javascript.Моя проблема в том, что эти функции javascript никогда не вызываются при обновлении "UpdatePanelWrapper".

Я пробовал это решение http://blog.dreamlabsolutions.com/post/2009/02/24/jQuery-document-ready-and-ASP-NET-Ajax-asynchronous-postback.aspx,, добавив этот вызов javascript внутри "UserControl1", хотя он не работает.Я заставил его работать, только если я добавлю этот вызов javascript на страницу aspx, но не внутри "UserControl1".

Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 4 ]

11 голосов
/ 17 мая 2011

вот как это можно сделать ....

 <script type="text/javascript">

        Sys.Application.add_init(appl_init);

        function appl_init() {
            var pgRegMgr = Sys.WebForms.PageRequestManager.getInstance();
            pgRegMgr.add_endRequest(EndHandler);
        }

        function EndHandler() {
        // This will be called whenever your updatepanel update 
        // It will be trigger after the update updatepanel
        //add your javascript here
        }                                                          
    </script>  
1 голос
/ 16 июня 2011

Сценарии, которые возвращаются в ответе UpdatePanel, не оцениваются. Если я правильно понимаю, вы хотели бы выполнить некоторые операции сценария, которые возвращаются в представлении UpdatePanel.

Если да, я ответил на этот вопрос здесь:

eval скрипт asp.net в html-ответе ajax

1 голос
/ 17 мая 2011

вы можете использовать

Sys.Application.add_load (WireEvents);// исправить проводку для панели обновления .NET ajax

вроде

<script language="javascript" type="text/javascript">
// <![CDATA[
    Sys.Application.add_load(WireEvents); // fix wiring for .NET ajax updatepanel
    $(WireEvents); // handle page load wiring using jquery. This will fire on page load


    function WireEvents() {
               //do stuff here
    };
// ]]>
</script>

о, и еще одна вещьбудьте осторожны с именами функций.иначе это будет беспорядок.попробуйте что-то вроде этого

<script language="javascript" type="text/javascript">
// <![CDATA[
    Sys.Application.add_load(WireEvents_<%=this.ID%>); // fix wiring for .NET ajax updatepanel
    $(WireEvents_<%=this.ID%>); // handle page load wiring


    function WireEvents_<%=this.ID%>() {

    };// end WireEvents_


// ]]>
</script>

, поэтому добавление _<%=this.ID%> к имени функции гарантирует, что каждый экземпляр элемента управления вызывает свою собственную функцию.при условии, что вы можете иметь несколько экземпляров элемента управления.Если не по крайней мере, это предотвращает путаницу при вызове wireevents для различных элементов управления

0 голосов
/ 17 мая 2011

В идеале, весь ваш JavaScript должен находиться внизу вашей страницы прямо перед закрывающим тегом </body>.

Если вы используете jQuery, вам нужно будет использовать live () или делегат () , чтобы убедиться, что это событие обработчики всплывают, даже когда страница обновляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...