从父ASP.NET页面处理用户控件中的LinkBut​​ton的Click事件

时间:2010-07-20 15:50:33

标签: asp.net user-controls

我在用户控件中有一个LinkBut​​ton,它已处理:

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

在某些ASPX页面上,我想处理页面代码后面的点击,与用户控件内部相反。如何从父页面后面的代码覆盖控件中的句柄?

更新 根据答案,我更新了用户控件:

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

问题是确定if行的正确语法,因为上面的内容无效。

2 个答案:

答案 0 :(得分:3)

您必须从用户控件中公开新事件。道歉如下面的代码都在 C# 中,自从我触及VB.Net以来已经很长时间了,但你应该明白这一点:

您可以通过将以下内容添加到UserControl

来使用委托活动
public event OnLoginClickHandler LoginClick;
public delegate void OnLoginClickHandler (object sender, EventArgs e);

然后将以下内容发送到您的LinkBut​​ton 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);
    }
}

然后你可以在你的aspx标记中加入这个:

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

Page 上的服务器端事件处理程序如下:

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

<强>更新

我认为这是您将事件订阅检查转换为VB.Net的方式:

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

答案 1 :(得分:1)

我认为您应该查看下面的代码和链接。

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

详细了解其工作原理(参考): -

Handle events of usercontrol in parent page in asp.net

Calling a method of parent page from user control