我的usercontrol中有一个按钮。单击该按钮时,我需要调用aspx页面中的方法。
我该怎么做?
由于
答案 0 :(得分:1)
仅供参考我是C#,您需要将我的解决方案转换为vb.net,或者如果有人希望编辑这个会膨胀的答案。我可以尝试记住语法但是我会弄错它并增加更多的混淆然后它的价值。
这样做,所有人都在做的是将页面转换为正确的类型:
((MyParentPageType)this.Page).Method()
据说我不建议这样做。您基本上将此用户控件硬连线到父页面。您至少可以定义一个接口,任何包含此控件的页面都必须实现。此时你已经提供了一点脱钩。
更好的机制是用户控件引发一个事件,父页面将订阅该事件。这就是所有其他控件的工作原理。你可以这样做
在您的UserControl中添加一个事件:
private static readonly object EventClick=new object();
public event EventHandler<ClickEventArgs> Click
{
add
{
base.Events.AddHandler(EventClick, value);
}
remove
{
base.Events.RemoveHandler(EventClick, value);
}
}
然后您的页面将为Click事件添加处理程序,然后您可以在需要时触发事件。现在,您已将用户控件与页面分离。
答案 1 :(得分:0)
不熟悉VB.Net,但在C#上我将添加代码:
/// <summary>
/// Relay
/// </summary>
public event EventHandler ButtonClick;
protected void BtnClick(object sender, EventArgs e)
{
if (this.ButtonClick != null) this.ButtonClick(sender, e);
}
我认为VB.Net会(但真的不确定!):
Public Event ButtonClick as EventHandler
Private Sub BtnClick(ByRef sender as object, ByRef e as EventArgs)
RaiseEvent ButtonClick(sender, e)
End Sub
这会在UserControl上公开一个事件,该事件可以在页面中用于连接它。
在UserControl中标记Asp:Button时,设置OnClick="BtnClick"
,它应该将事件转发到UserControl上的事件。
在页面标记中,将OnButtonClick="PageBtnClick"
添加到UserControl标记,然后可以调用您希望的页面方法。