我在用户控件中有一个LinkButton,它已处理:
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行的正确语法,因为上面的内容无效。
答案 0 :(得分:3)
您必须从用户控件中公开新事件。道歉如下面的代码都在 C# 中,自从我触及VB.Net以来已经很长时间了,但你应该明白这一点:
您可以通过将以下内容添加到UserControl
:
public event OnLoginClickHandler LoginClick;
public delegate void OnLoginClickHandler (object sender, EventArgs e);
然后将以下内容发送到您的LinkButton 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
}
}
详细了解其工作原理(参考): -