2011-02-02 84 views
0

在我的ASP.NET應用程序中,我在母版頁中有一個控件,在某些場合/交互中引發事件Foo沒有直接連接的事件觸發?

我也有一些頁面有另一個控件,必須重新綁定自己,當這個事件被觸發。

不幸的是,我可以看到它們之間互相通信的唯一方法是創建一個長事件鏈(派生一個新的MasterPage MasterPageSuperDuper,將用戶控件中的事件處理程序附加到Foo的事件中,然後引用此事件在控制器的主頁面中出現幾頁 - 基本上使用主頁面作爲控制中心)。

是否有可能引發頁面控件可以看到的事件而不會涉及到masterpage?

+0

嘗試Control.RaiseBubbleEvent方法 – 2011-02-02 17:12:34

+0

您正在使用更新面板還是隻是定期回發? – 2011-02-02 17:14:06

回答

1

我們走吧。

在母版創建一個接口,放在App_Code文件夾

public interface IBinder 
{ 
    void Bind(); 
} 

的PageControl實現接口

public partial class WebUserControl2 : System.Web.UI.UserControl, IBinder 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    public void Bind() 
    { 
    } 
} 

在控制

public partial class WebUserControl1 : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void butRaiseEvent_Click(object sender, EventArgs e) 
    { 
     CheckSub(this.Parent.Parent.Controls); 
    } 

    private void CheckSub(ControlCollection cc) 
    { 
     foreach (Control c in cc) 
     { 
      if (c is IBinder) 
       ((IBinder)c).Bind(); 
      else 
       CheckSub(c.Controls); 
     } 
    } 
} 

讓我知道如果它的工作原理。

0

頁面上的控件不知道其他「孩子」是誰,所以你不能自動讓他們說「看,這個頁面上有另一個控件,你怎麼做其他控件?沒有做一些工作,通常通過父容器。

有一些機制可以用來組裝事物,但是您仍然必須通過像頁面或母版頁這樣的通用「容器」來獲取事件。

我很好奇你爲什麼要在你的母版頁上提出需要在兒童層面進行如此複雜控制的事件。我會想象有一個更優雅的建築解決方案。