2012-12-07 47 views
1

所以在我的Default.aspx頁面上我有幾個listboxes,我在page_load上填充。ASP.net調用函數Default.aspx.cs從Site.Master.cs類

但是,如果用戶更改這些列表框並想恢復原始設置,我想要在Site.Master中定義的頂部按鈕調用相同的函數增益來恢復原始值。

如何從Site.Master文件獲取對_Default對象的實例的引用?有沒有一種方法可以全局訪問首次加載頁面時調用的_Default實例?或者我需要在某處手動存儲?

例如:

Default.aspx.cs:

namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      setConfigurationData(); 
     } 

     public void setConfigurationData() 
     { 
      //Do stuff to elements on Default.aspx 

Site.Master.cs

namespace WebApplication1 
{ 
    public partial class SiteMaster : System.Web.UI.MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void RefreshMenu1_MenuItemClick(object sender, MenuEventArgs e) 
     { 
      //Need to call this function from an instance of _Default, but I don't know 
      //how to retrive this or save it from when it is first created 

      //_Default.setConfigurationData(); 
+1

如果您的母版頁需要任何特定頁面的實現細節,那麼您做錯了。 –

+0

@JoelEtherton,雖然我同意,但我認爲他的意圖是不同的。他希望在主頁上聲明一個按鈕,這些按鈕在許多頁面上的工作方式不同,而不是針對特定頁面的邏輯。但這並不一定意味着它是正確的。 –

+0

@DaveZych:我的評論並不意味着貶低,只是一種輕微的理性之聲。一旦出現這座橋,幾乎總是有一種更簡單的方法來達到預期的效果。我會建議OP搜索該方法。 –

回答

2

這個類範圍的變量添加到您的母版頁

private System.Web.UI.Page currentContentPage = new System.Web.UI.Page(); 

則此方法添加到您的母版頁

public void childIdentity(System.Web.UI.Page childPage) 
{ 
    currentContentPage = childPage; 
} 

現在您的默認頁在Page_Load添加

SiteMaster masterPage = Page.Master as SiteMaster; 
masterPage.childIdentity(this); 

現在,您的主頁應該能夠通過在其currentContentPage變量的引用來訪問默認頁面上的對象。

+0

我喜歡這種方法,可以有效地向Site Master註冊當前頁面。然而,我不能讓它與這個代碼一起工作:_Default myDefault =(_Default)currentContentPage;'然後'myDefault.setConfigurationData();' – jamis0n

+0

Nevermind-這是我的點擊事件的問題...像一個魅力! – jamis0n

0

創建一個基類爲您的網頁,從繼承,與虛擬方法名爲setConfigurationData。然後在您的母版頁中,將Page對象投射到您的基類並調用您的方法。

public class MyBasePage : Page 
{ 
    public virtual void setConfigurationData() 
    { 
     //Default code if you want it 
    } 
} 

在你的頁面:

public partial class MyPage : MyBasePage 
{ 
    public override void setConfigurationData() 
    { 
     //You code to do whatever 
    } 
} 

母版頁:

protected void RefreshMenu1_MenuItemClick(object sender, MenuEventArgs e) 
{ 
    MyBasePage basePage = (MyBasePage)Page; 
    basePage.setConfigurationData(); 
}