gpt4 book ai didi

asp.net - 从父 ASP.NET 页面处理用户控件中 LinkBut​​ton 的单击事件

转载 作者:行者123 更新时间:2023-12-01 12:48:27 25 4
gpt4 key购买 nike

我在用户控件中有一个 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 行的正确语法,因为上面的语法无效。

最佳答案

您必须从用户控件中公开一个新事件。抱歉,以下代码全部在 C# 中,我已经很久没有接触 VB.Net 了,但您应该明白了:

您可以通过将以下内容添加到您的 UserControl 来使用委托(delegate)事件:

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

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

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

关于asp.net - 从父 ASP.NET 页面处理用户控件中 LinkBut​​ton 的单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3291849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com