2010-01-13 4 views
0

У меня есть родительская страница с двумя элементами управления данными. Я хочу, чтобы иметь возможность открыть дочернее окно, сделать что-то на нем, и когда он закрывается, я хочу переустановить только один из двух элементов управления данными на родительской странице. У меня есть элемент управления, который я хочу обновить в UpdatePanel, поэтому хотел бы перезвонить ему и вызвать UpdatePanel.Update().Можно ли вызвать событие на стороне сервера на родительской странице при закрытии дочерней страницы?

ответ

2

Из дочернего окна вы не можете фактически «вызвать» функцию на стороне сервера для родительской страницы, однако вы можете использовать некоторый javascript для вызова функций на стороне клиента на этой странице.

На родительской странице:

<script language="Javascript" type="text/javascript"> 
function CallAlert() 
{ 
    alert("This is parent window's alert function."); 
} 
</script> 

На странице ребенка:

<script language="Javascript" type="text/javascript"> 
function CallParentWindowAlert() 
{ 
    window.opener.CallAlert(); 
    return false; 
} 
</script> 

В примере, который вы указали, в частности, где у вас есть в UpdatePanel, вы на самом деле оставил себя несколько варианты здесь. Если UpdatePanel задан с помощью какой-либо формы триггера, чтобы заставить его обновлять, будь то все дети или только определенные, в вашей родительской функции вы можете принудительно отправить ответ на один из этих элементов управления. В конечном счете, функция javascript родительских страниц должна иметь некоторую форму вызова __doPostBack(), ссылаясь на идентификатор элемента управления и некоторый (пустой) параметр, однако вам, вероятно, будет лучше генерировать этот javascript с помощью codebehind через:

Page.ClientScript.GetPostBackEventReference(control, null); 

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

0

Попробуйте все, что вам нужно сделать, это вызвать __doPostBack на родительской странице, ориентированной на панель обновления или что-то в панели обновления.

Родитель Код:

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <h1>Parent Window</h1> 
     Time: 
     <%= DateTime.Now.ToString() %> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 
       Update Panel Time<%= DateTime.Now.ToString() %> 
       <br /> 
       <asp:Button ID="Button1" Text="Submit" runat="server" /> 
       <a href="#" onclick="window.open('child.aspx')">Click To Open Child Window</a> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
    </form> 
</body> 
</html> 

Детский Код:

<%@ Page Language="C#" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script type="text/javascript" language="javascript"> 
     function UnloadMe() { 
      if (opener) { 
       opener.__doPostBack("UpdatePanel1", ""); 
      } 
     } 
    </script> 

</head> 
<body onunload="UnloadMe()"> 
    <form id="form1" runat="server"> 
    <div> 
    <h1>Child Window</h1> 
    </div> 
    </form> 
</body> 
</html> 
Смежные вопросы

 Смежные вопросы