2016-05-01 3 views
1

У меня есть страницы ASPX так:WebForms: определяет, которые контролируют в пределах UpdatePanel инициирует обновление

<asp:UpdatePanel runat="server" UpdateMode="always"> 
    <ContentTemplate> 
     <asp:DropDownList autopostback="true" runat="server" ID="DropDown1" OnSelectedIndexChanged="DropDown1_SelectedIndexChanged"> 
     </asp:DropDownList> 
     <asp:DropDownList autopostback="true" runat="server" ID="DropDown2" OnSelectedIndexChanged="DropDown2_SelectedIndexChanged"> 
     </asp:DropDownList> 
    </ContentTemplate> 
</asp:UpdatePanel> 

На каждом SelectionChanged любых из 2 выпадающих, частичный постбэка делается, и я обновить содержание UpdatePanel. Тем не менее, я хотел бы выполнить некоторый код js только после того, как панель обновления была вызвана выборомChanged of DropDown1.

Как я могу на своей странице попасть на clientSide, событие сразу после обновления и более важно обновление идентификатора элемента управления (в данном случае DropDown1), который активировал панель обновления.

меня попробовать это, но это называется каждый раз, когда страница загружена, даже в первый раз, и у меня нет никакой информации, на которой контролирует вызвавший UpdatePanel для обновления:

<script> 
    $(document).ready(function() 
    {  
     Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded) 
    }); 

    function PageLoaded(sender, args) { 
     // I have analyzed sender and args without any information to obtain the desired id "DropDown1" 
    } 

</script> 

ответ

1

Вы можете использовать sender._postBackSettings.sourceElement.id чтобы получить идентификатор исходного элемента управления после обратной передачи UpdatePanel. См. Пример ниже.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UpdatePanelTest.aspx.cs" Inherits="TestApp.UpdatePanelTest" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script src="/Scripts/jquery-1.8.2.min.js"></script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager runat="server" ID="sm" ></asp:ScriptManager> 
    <div> 
    <asp:UpdatePanel runat="server" UpdateMode="always"> 
     <ContentTemplate> 
      <asp:DropDownList autopostback="true" runat="server" ID="DropDown1" OnSelectedIndexChanged="DropDown1_SelectedIndexChanged"> 
       <asp:ListItem Text="option 1" Value="1" /> 
       <asp:ListItem Text="option 2" Value="2" /> 
       <asp:ListItem Text="option 3" Value="3" /> 
      </asp:DropDownList> 
      <asp:DropDownList autopostback="true" runat="server" ID="DropDown2" OnSelectedIndexChanged="DropDown2_SelectedIndexChanged"> 
       <asp:ListItem Text="option A" Value="A" /> 
       <asp:ListItem Text="option B" Value="B" /> 
       <asp:ListItem Text="option C" Value="C" /> 
      </asp:DropDownList> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
       function (sender) { 
        if (sender._postBackSettings.sourceElement.id == 'DropDown1') 
         DoSomethingAmazing(); 
       }); 
     }); 

     function DoSomethingAmazing() { 
      alert('OMG something amazing just occurred!'); 
     } 
    </script> 
    </form> 
</body> 
</html>