2011-08-05 37 views
3

我有兩個主頁面,由不同的內容頁面使用。 我想從內容頁面設置母版頁屬性,以便母版頁可以根據這些值顯示一些更改。然後,我還需要訪問母版頁中添加的用戶控件中的主頁面屬性以反映一些更改。如何實現這一目標?ASP.Net Web窗體 - 如何從頁面和用戶控件設置MasterPage的屬性

我已經找到了一種方法,通過添加<%@ MasterType VirtualPath="/Site.master" %>然後使用**Master.property=value**但不確定如何訪問用戶控件,從內容頁面設置母版頁屬性。有任何想法嗎?

回答

2

您可以創建一個基類形式的母版頁從繼承包括你正在尋找存儲性能:

abstract public class MasterPageBase : System.Web.UI.MasterPage 
{ 
    public string Prop1 
    { 
     get { return "Some Value"; } 
    } 
} 

從你的用戶控件,那麼你就可以訪問屬性如下:

MasterPageBase masterPage = (MasterPageBase)this.Page.Master; 
string strTest = masterPage.Prop1; // "Some Value" 
0

我想你可以訪問兩種方式在你的母版頁定義的用戶控件:

通過使用FindControl方法,爲了使用這個你哈已經添加在內容頁面的用戶控制服務器變量太多,在.aspx頁面中添加此:

<%@ Register Src="~/myControl.ascx" TagName="myControl" TagPrefix"uc" %> 
在後面的代碼

則:

myControl = (myControl)this.Page.Master.FindControl("userControl_Id"); 

,或者你可以創建你的母版的公共屬性返回您的用戶控件:

public myControl UserControl { get; set; } 

,並在您的內容頁面的後臺代碼,你可以簡單地通過控件屬性訪問該用戶控件:

myControl ctrl = (myControl)this.Page.Master.UserControl; 
0

我不能得到上述答案的工作,所以這裏是我工作:

你想從一個用戶控件引用母版頁屬性。

首先,您的主頁將有一個公共屬性,像這樣:

public string BodyClass 
{ 
    set 
    { 
     this.masterBody.Attributes.Add("class", value); 
    } 
} 

現在用戶控件ASCX文件添加像這樣到母版頁的引用:

<%@ Register Src="~/Source/MasterPages/Main.master" TagPrefix="MSTR" TagName="MasterPage" %> 

然後在代碼背後(在我的情況下C#)你有這樣的代碼:

Main masterPage = (Main)this.Page.Master; 
masterPage.BodyClass = "container"; 

沒有參考到您的用戶控件上方的母版頁將無法找到母版頁類。

0

控件在Master.designer.cs中定義,訪問修飾符爲「protected」。將其定義剪切並粘貼到代碼隱藏(Master.cs)並將訪問修飾符更改爲「public」。 然後,您可以訪問主頁面控件,如Derek Hunziker給出的答案:

MasterPageBase masterPage = (MasterPageBase)this.Page.Master; 
string strTest = masterPage.Prop1; // "Some Value" 
相關問題