2008-12-17 7 views
0

Quel serait le meilleur moyen d'appeler une méthode dans le code-behind de la page parent à partir du code derrière la page enfant dans le modèle de site Web ASP.NET 2.0?Appel d'un code de page parent derrière la méthode d'un code de page enfant derrière - Modèle d'héritage de page ASP.NET 2.0

Scénario: L'utilisateur clique sur un lien dans la page parent pour afficher les détails d'un enregistrement de données dans une page enfant (Le parent et l'enfant sont deux pages séparées). L'utilisateur va modifier les données dans la page du client. Une fois que la page enfant a traité la mise à jour, la page enfant se ferme et j'ai besoin de relier la page parente pour refléter la mise à jour.

j'ai fait quelque chose de similaire, mais il appelait la page parent d'un contrôle utilisateur qui a été inclus dans la page parent

if(Page.GetType().ToString().Contains("ASP.Default_aspx")) 
{ 
    MethodInfo MyMethod = this.Parent.TemplateControl.GetType().GetMethod("MyMethod"); 
    MyMethod.Invoke(this.Page, null); 
    MyMethod = null; 
} 

MISE À JOUR: Je dois le faire à partir du code derrière parce que l'enfant La page se ferme après la mise à jour des données.

+0

j'ai pu accomplir cela en faisant la [solution] suivante (http://stackoverflow.com/questions/376404/load-an-aspnet-20-aspx-page-using-systemreflection#376646) –

Répondre

1

Le moyen le plus simple serait de faire le tout sur une seule page en utilisant un multiview ou quelque chose de ce genre.

A part ça, avec javascript vous pouvez appeler

document.opener.location.href = "url"; 

changer l'URL sur la page parent. Vous pouvez simplement garder la même chose, ou coller des choses dans la chaîne de requête et muck avec ces valeurs sur Page_Load

0

Si vous ouvrez la page enfant dans une fenêtre contextuelle modale, vous pouvez accéder à window.returnValue sur la page parent (via JavaScript), puis appelez une actualisation de page ou un appel de rebind d'Ajaxy.

Vérifiez this page pour savoir comment retourner une valeur à partir d'une fenêtre contextuelle modale et faire quelque chose en fonction de cette valeur sur la page parente.

Cependant, si vous avez l'option, je serais loin d'ouvrir le formulaire d'édition dans une page séparée. Je mettrais le formulaire d'édition dans un contrôle utilisateur et le montrerais/le cacherais à la manière d'une lightbox.

0

Vous ne savez pas si c'est exactement ce que vous voulez, mais vous auriez pu utiliser l'affichage inter-pages pour cela. Cela vous permet de publier sur la page parent à partir de la page enfant avec l'avantage d'avoir accès à ViewState de la page enfant. Pour ce faire, définissez la propriété PostBackUrl d'un bouton sur la page enfant. Dans la page parent, vous pouvez ensuite accéder à la propriété PreviousPage pour extraire des valeurs de la page enfant. Ainsi, dans la page de l'enfant un bouton tel que:

<asp:Button ID="Button1" runat="server" Text="Update data" 
     PostBackUrl="~/Parent.aspx" onclick="Button1_Click" /> 

Puis, en cas Parent.aspx Page_Load:

protected void Page_Load(object sender, EventArgs e) { 

    if (IsCrossPagePostBack) { 

     Page prevPage = this.PreviousPage; 
     string myVal = prevPage.FindControl("myTextBox1").ToString(); 
     string myVal2 = prevPage.FindControl("myTextBox2").ToString(); 
     //etc 

    } 
} 
Questions connexes