2009-09-18 108 views

回答

1

FYI我是一个C#的家伙,你需要我的解决方案转换为vb.net,或者如果有人希望编辑这个答案,这将是膨胀。我可以尝试和记住语法,但是我会弄错它,增加更多的困惑,然后它的价值。

这工作,全部做的是铸造页面向右类型:

((MyParentPageType)this.Page).Method() 

这一说我不建议这样做。你基本上把这个用户控件硬连线到父页面。您至少可以定义一个接口,任何包含此控件的页面都必须实现。此时你已经提供了一些解耦。

一个更好的机制是用户控件引发一个事件,即父页面将是订阅者。这是所有其他控件的工作原理。为此,您可以像

在你的用户控件添加事件:

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事件,那么当你需要,你可以触发事件。现在,您已将页面上的用户控件分离出来。

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标记,然后可以调用您希望的页面的方法。

相关问题