2010-08-18 7 views
2

J'ai un UserControl nommé RolloverLink qui contient essentiellement un asp:LinkButton et un <img />. J'ai essayé de placer le gestionnaire OnClick comme ceci:LinkButton dans UserControl publie mais ne déclenche pas OnClick

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="RolloverLink.ascx.cs" Inherits="Controls.RolloverLink" %> 
<asp:LinkButton runat="server" ID="mug" OnClick="propagate" 
    CausesValidation="false" onmouseout="MM_swapImgRestore()" > 
     <img runat="server" ID="pug" name="<%# pug.ClientID %>" border="0" /> 
</asp:LinkButton> 

Je mis un point d'arrêt dans la méthode propagate, mais il ne s'arrête pas là. La page publie (elle clignote), mais l'événement n'est pas appelé.

Voilà comment mon code regarde derrière:

public partial class RolloverLink : System.Web.UI.UserControl 
{ 
    private string _imageRl; 
    public string Href { get; set; } 
    public string ImageUp { get { return pug.Src; } set { pug.Src = value; } } 
    public string ImageRl { 
     get 
     { 
      return _imageRl; 
     } 
     set 
     { 
      _imageRl = value; 
      mug.Attributes["onmouseover"] = "MM_swapImage('"+pug.ClientID+"','','"+_imageRl+"',1)"; 
     } 
    } 
    public string Alt { get { return pug.Alt; } set { pug.Alt = value; } } 
    public int Width { get { return pug.Width; } set { pug.Width = value; } } 
    public int Height { get { return pug.Height; } set { pug.Height = value; } } 
    public event EventHandler Click 
    { 
     add{click += value; } 
     remove { click -= value; } 
    } 
    private event EventHandler click; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.Url.AbsolutePath.EndsWith(Href)) 
      ImageUp = ImageRl; 
    } 
    protected void propagate(object sender, EventArgs e) 
    { 
     EventHandler copy = click; 
     if (copy != null) 
      copy(this, EventArgs.Empty); 
     else 
      Response.Redirect(Href); 
    } 
} 

et voici comment je peux l'utiliser sur ma page principale:

<pwc:RolloverLink ID="contacts" Href="Contacts.aspx" 
    ImageRl="images/M_contacts_rl.png" ImageUp="images/M_contacts_up.png" 
    Alt="Initech Global : Laurierville, Qu&eacute;bec, Canada" Width="61" 
    Height="17" runat="server" /> 

Est-ce que quelqu'un a une idée ou un pointeur vers une idée?

+0

vérifier que le linkbutton a le même ClientId sur tous les messages - vous pouvez vérifier cela en inspectant l'élément sur votre navigateur –

+0

ClientID semble rester le même à chaque chargement de la page: 'Initech Global : Laurierville, Québec, Canada'. –

Répondre

0

Vous ajoutez l'événement click, puis de le retirer dans ce code

public event EventHandler Click 
{ 
    add{click += value; } 
    remove { click -= value; } 
} 

Je pense que vous essayez de supprimer une référence à un événement de clic qui pourrait être là, puis en ajoutant une référence à la cliquez sur l'événement que vous définissez. Il suffit de basculer le supprimer & ajouter et cela devrait fonctionner.

public event EventHandler Click 
{ 
    remove { click -= value; } 
    add{click += value; } 

} 
+0

Cela ne devrait pas empêcher de «propager» le tir. Si vous regardez 'propager 'essaie de déclencher' click' s'il a été défini à partir d'un objet externe –

0

Cela ressemble à une manière non standard d'ajouter eventhandlers à un événement click:

Avez-vous essayé la syntaxe standard:

_mug.Click += new EventHandler(value);