【问题标题】:LinkButton in UserControl posts back but does not fire OnClickUserControl 中的 LinkBut​​ton 回发但不触发 OnClick
【发布时间】:2011-03-31 15:45:43
【问题描述】:

我有一个名为 RolloverLink 的 UserControl,它基本上包含一个 asp:LinkButton 和一个 <img />。我尝试像这样设置 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>

我在propagate 方法中设置了一个断点,但它并没有就此停止。该页面确实回发(它闪烁),但没有调用该事件。

我的代码如下所示:

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);
    }
}

这就是我在母版页上使用它的方式:

<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" />

有没有人有想法或指向想法的指针?

【问题讨论】:

  • 检查链接按钮在所有帖子上是否具有相同的 ClientId - 您可以通过检查浏览器上的元素来检查这一点
  • ClientID 似乎在每次页面加载时都保持不变:&lt;a id="contacts_mug" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('contacts_pug','','images/M_contacts_rl.png',1)" href="javascript:__doPostBack('contacts$mug','')"&gt;&lt;img src="images/M_contacts_up.png" id="contacts_pug" border="0" alt="Initech Global : Laurierville, Québec, Canada" width="61" height="17" /&gt;&lt;/a&gt;。

标签: c# asp.net user-controls webforms


【解决方案1】:

您正在添加点击事件,然后在此代码中将其删除

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

我认为您正在尝试删除对可能存在的点击事件的引用,然后添加对您正在定义的点击事件的引用。只需切换删除和添加,它应该可以工作。

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

}

【讨论】:

  • 这不应该阻止propagate 被解雇。如果你看 propagate 尝试触发 click 如果它是从外部对象设置的
【解决方案2】:

这看起来像是一种将事件处理程序添加到点击事件的非标准方式:

您是否尝试过标准语法:

  _mug.Click += new EventHandler(value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多