Remontée d'événements De Contrôles Utilisateur Web dans ASP.NET
J'ai deux UserControls - UserControl1.ascx et UserControl2.ascx dans PageDefault.aspx:
Comment je peux appeler la méthode (GetLabelText() in UserControl1.ascx
) à partir de UserControl2.ascx
à l'aide de remontée d'événements?
C'est mon code d'exemple - Lorsque je clique sur le bouton (UserControl2Button1 in UserControl1.ascx
) - je veux appeler la méthode GetLabelText() from UserControl2.ascx
- à l'aide de remontée d'événements.
PageDefault.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PageDefault.aspx.cs" Inherits="TelerikAjaxEvents.PageDefault" %>
<%@ Register TagPrefix="uc" TagName="UserControl1" Src="~/UserControl1.ascx" %>
<%@ Register TagPrefix="uc" TagName="UserControl2" Src="~/UserControl2.ascx" %>
<!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>Page Default</title>
</head>
<body>
<form id="form1" runat="server">
UserControl1:
<uc:UserControl1 ID="UserControl1" runat="server" />
UserControl2:
<uc:UserControl2 ID="UserControl2" runat="server" />
</form>
</body>
</html>
UserControl1.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControl1.ascx.cs" Inherits="TelerikAjaxEvents.UserControl1" %>
<asp:Label ID="UserControl1Label1" runat="server"></asp:Label>
UserControl1.ascx.cs
public partial class UserControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public void GetLabelText()
{
UserControl1Label1.Text = "Text is Visible";
}
}
UserControl2.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControl2.ascx.cs" Inherits="TelerikAjaxEvents.UserControl2" %>
<asp:Button ID="UserControl2Button1" runat="server" Text="Send"
onclick="UserControl2Button1_Click" />
UserControl2.ascx.cs
public partial class UserControl2 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void UserControl2Button1_Click(object sender, EventArgs e)
{
//Call method from UserControl1 (GetLabelText()) - Show Label text - USING BUBBLE EVENT
}
}
Il n'y a pas d'événement de "bouillonnement" mécanisme de ASP.NET. Vous aurez à exposer l'événement par l'ajout d'un nouveau UserControl2.
OriginalL'auteur JohnMalcom | 2012-06-30
Vous devez vous connecter pour publier un commentaire.
Il existe de nombreuses façons d'aller à ce sujet. Marque de la réponse de deviner ce qui a été classiquement connue sous le nom de remontée d'événements à l'aide d'un construit dans la fonctionnalité du Système.Web.L'INTERFACE utilisateur.Contrôle de contrôle de base. Cependant, c'est un simple exercice d'exposer votre propre événement, se lier à elle, et de la bulle des événements par le biais d'un contrôle de la hiérarchie. Pour plus de détails sur l'utilisation de BubbleEvent dans ASP.NET lire la suite. Veuillez garder à l'esprit que ces deux MSDN articles ont été écrits pour .NET 1.1
Le bouillonnement d'un Événement
Remontée D'Événements De L'Échantillon De Contrôle
K. Scott Allen fait un bon travail en démontrant exactement ce qu'un événement de "bouillonnement" de la mise en œuvre ressemble à son poste: Remontée d'événements De Contrôles Utilisateur Web dans ASP.NET (C#) . Voir la suite de la modification de votre exemple pour l'inspiration.
UserControl1 avec GetLabelText()
UserControl2 avec exposés BubbleClick gestionnaire d'événement que les appelants peuvent s'abonner à.
PageDefault s'abonne à UserControl2 de BubbleClick gestionnaire d'événement et exécute UserControl1.GetLabelText()
Je vois. J'ai mis à jour la réponse à utiliser le motif évoqué dans cet article. Est-ce plus en ligne avec ce que vous pensiez?
OriginalL'auteur Sean Glover
De remontée d'événements est un mal compris le concept ASP.NET WebForms. Il n'existe pas (et est utilisé par la plupart des databound contrôles), mais est souvent confondu avec le simple concept de "mettre en place un événement dans un contrôle utilisateur" (K Scott Allen n').
La base de remontée d'événements est que l'événement se déplace vers le haut à travers le contrôle de la hiérarchie jusqu'à ce qu'il est manipulé ou frappe la racine. Cela permet une centralisation du code du gestionnaire. Il est implémenté en utilisant le Contrôle.RaiseBubbleEvent et de Contrôle.OnBubbleEvent méthodes. Les principaux cas d'utilisation des contrôles avec beaucoup de contrôles enfants (pensez à les Répéteurs, les ListViews, etc.). Plutôt que de souscrire à chaque contrôle, le Répétiteur les attrape tous dans OnBubbleEvent et soulève un seul ItemCommandEvent pour eux.
Si vous avez vraiment envie de remontée d'événements (par opposition à K. Scott exemple), il serait quelque chose comme:
La séquence d'événements qui va comme ceci:
OriginalL'auteur Mark Brackett
Pouvez-vous essayer de déclarer la UserControl1 comme des biens publics(par exemple, "UserControl1") sur le PageDefault.aspx et puis dans le UserControl2, utilisez
Parent.Page.UserControl1.GetLabelText()
?OriginalL'auteur Ashish Gupta