2010-07-20 2 views
3

J'ai un LinkButton dans un contrôle utilisateur et il a traité avec:Poignée Cliquez sur l'événement pour LinkButton dans le contrôle de l'utilisateur de la page ASP.NET parent

Private Sub LoginLinkLinkButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginLinkLinkButton.Click 
     Response.Redirect("/", True) 
End Sub 

Sur certaines pages ASPX Je voudrais gérer le clic de le code de la page derrière, contrairement au contrôle de l'utilisateur. Comment puis-je remplacer le handle dans le contrôle du code parent derrière la page?

Mise à jour: Sur la base de la réponse, j'ai la mise à jour le contrôle de l'utilisateur:

Public Event LoginLinkClicked As OnLoginClickHandler 
Public Delegate Sub OnLoginClickHandler(ByVal sender As Object, ByVal e As EventArgs) 

[...] 

Private Sub LoginLinkLinkButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginLinkLinkButton.Click 
     **If OnLoginClickHandler IsNot Nothing Then** 
      RaiseEvent LoginLinkClicked(Me, e) 
     Else 
      Response.Redirect("/", True) 
     End If 
End Sub 

Le problème consiste à déterminer la syntaxe correcte pour la ligne si parce que ce qui précède est invalide.

+0

Je ne sais pas si cela est possible ou non, mais vous pouvez certainement Envisagez de séparer la logique en une classe centrale que vous appelez à la fois les gestionnaires d'événements ASPX et ASCX. – TimS

+0

J'ai mis à jour ma réponse. Est-ce une traduction valide pour votre mise à jour? – GenericTypeTea

+0

Je ne suis pas sûr que cela va aider, fondamentalement je veux définir un comportement par défaut, et sur quelques pages remplacer le comportement par défaut. Cela revient à trouver un moyen d'interroger si un gestionnaire a des abonnés dans VB.NET. – Josh

Répondre

3

Vous devrez exposer un nouvel événement à partir du contrôle utilisateur. Toutes mes excuses que le code suivant est dans C# et il a été longtemps que je l'ai touché VB.Net, mais vous devez avoir l'idée:

Vous pouvez utiliser un événement délégué en ajoutant ce qui suit à votre UserControl :

public event OnLoginClickHandler LoginClick; 
public delegate void OnLoginClickHandler (object sender, EventArgs e); 

appellent ensuite les éléments suivants à votre LinkButton événement Click:

protected void LoginLinkLinkButton_Click(object sender, EventArgs e) 
{ 
    // Only fire the event if there's a subscriber 
    if (OnLoginClickHandler != null) 
    { 
     OnLoginClickHandler(sender, e); 
    } 
    else 
    { 
     // Not handled, so perform the standard redirect 
     Response.Redirect("/", true); 
    } 
} 

Vous pouvez ensuite accrocher juste place dans e est dans votre balisage ASPX:

<asp:LinkButton runat="server" ID="Foo" OnLoginClick="Foo_LoginClick" /> 

Et votre gestionnaire d'événements côté serveur sur votre page sera la suivante:

protected void Foo_LoginClick_Click(object sender, EventArgs e) 
{ 
    // This event was fired from the UserControl 
} 

MISE À JOUR

Je pense que c'est de savoir comment vous traduisez la vérification d'abonnement à VB.Net:

If LoginClick IsNot Nothing Then 
    RaiseEvent LoginClick(sender, e) 
End If 
+0

Bonne solution. Je n'arrive pas à traduire si (OnLoginClickHandler!= null) { OnLoginClickHandler (expéditeur, e); } Je posterai ce que j'ai dans la question. – Josh

+0

Cela crée l'erreur suivante: 'OnLoginClickHandler' est un type et ne peut pas être utilisé comme une expression. – Josh

+0

@Josh - Je l'ai mis à jour, mon erreur! – GenericTypeTea

1

Je pense que vous devriez jeter un oeil dans le code ci-dessous et les liens.

Parent Page aspx.cs part 

public partial class getproductdetails : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Button btnYes = (Button)ucPrompt.FindControl("btnYes"); 
    btnYes.Click += new EventHandler(ucPrompt_btnYes_Click); 
} 

void ucPrompt_btnYes_Click(object sender, EventArgs e) 
    { 
    //Do Work 
    } 
} 

Lire plus de détails comment cela fonctionne (Référence): -

Handle events of usercontrol in parent page in asp.net

Calling a method of parent page from user control

Questions connexes