2009-06-02 53 views
7

我有一個「Master」Masterpage,並且我有2個「Sub」Masterpages。這2個子目錄的主頁面屬性設置爲「主」主頁面。迄今爲止都很好。MasterPage使用Masterpages,並繼承

那麼,今天我被告知Sub1和Sub2實際上是從Master Masterpage「繼承」的。我以爲他們是不準確的將自己的語言,但沒有,她要我到類定義更改爲

public partial class Sub2 : TheMaster 

(這些都不是名字)。

所以,現在我已經得到了Sub1的和分公司2是母版頁,並有大師的母版頁,而且他們是一流的「大師」的

我很這一困惑的,並不確定這會有什麼樣的影響。它現在似乎編譯和運行良好,但我們今天剛剛開始這個6個月的項目,而且我不想進入第5個月,並發現我們有一個主要的設計缺陷。

誰能告訴我,這是完全正常的,或者我們完全搞砸了嗎?

我很害怕...抱着我。

編輯:澄清 - 她希望我也從主母版頁繼承的原因是,我們在該頁面中設置了一些東西,並且我們希望它們可用於子母版頁面。像站點地圖中當前的節點,渲染頁面,一些用戶帳戶的東西,等等。

+0

你有一個母版頁的主頁面有點奇怪。主頁面通常包含主標籤,和標籤。你的子主頁面是否也包含這些內容? – Ropstah 2009-06-02 21:45:35

+0

不是。主頁面包含您提到的所有內容,以及在整個網站上不變的頁眉和頁腳div。 Sub master 1在內容主體中包含3列的佈局,而sub master 2包含2列布局(以及其他一些事情,真的) – 2009-06-02 21:49:11

回答

1

基本上你所做的是設置頁面,以便該類繼承指定基地的所有項目。 「Masterpage」屬性的連接會創建弱關聯,並將內容呈現在特定結構中。從基礎繼承的類將邏輯向前移動,而不是僅僅讓它執行,你可以覆蓋它。

現在,經過考慮之後,你很可能不希望在母版屬性集....只是類的繼承

+0

好吧,但是爲什麼?並且,如何在主母版頁中指定內容區域,然後使用這些區域並在子母版頁中指定新的內容區域(如果我不想要母版頁屬性集)? – 2009-06-02 21:59:32

4

它確實有可能有嵌套母版頁 - 見http://msdn.microsoft.com/en-us/library/x2b3ktt7.aspx的參考。

編輯按評論

我不相信你,子主頁應該從主要主網頁被繼承後面的代碼中。

每個母版頁(包括子母版頁)應直接從母版頁繼承,即public partial class Sub1 : System.Web.UI.MasterPage

只有子母版頁的ASP標記應參考的主要母版頁,即<%@ Master Language="C#" MasterPageFile="~/TheMaster.master" ... />

如果您添加子母版頁通過VS UI項目,選擇TheMaster.master作爲母版頁那麼你會看到這是如何設置的。母版頁使用被設計爲僅通過內容(標記),而不是通過類繼承。

2

我剛剛遇到了這個問題,並且想要添加特定的問題,當您從嵌套的母版頁繼承時會遇到這些問題。例如,BaseMaster.master中的以下代碼。CS:

//BaseMaster.master.cs 
public String FooLabelText 
{ 
    get { return FooLabel.Text; } 
    set { FooLabel.Text = value; } 
} 

從繼承頁面調用將拋出一個NullReferenceException時。 FooLabel(BaseMaster.master文件中的標籤)不存在於嵌套母版頁(SubMaster.master)中,因此如果您訪問該屬性,它將會中斷。它

你可以解決這個問題通過overridding在子類和屬性重新定向到你嵌套母版頁,但是這真的中斷.net母版頁的設計理念:

//SubMaster.master.cs inherits from BaseMaster 
new public String FooLabelText 
{ 
    get { return (Master as BaseMaster).FooLabel.Text; } 
    set { (Master as BaseMaster).FooLabel.Text = value; } 
} 

請注意,我沒有使用base.FooLabel,而是使用Master.FooLabel,這實際上指向了不同的對象。充其量,這是一種黑客攻擊,在很多情況下,它會創造更多的工作和重複。

一種替代方法是創建一個具有所需應用程序功能的虛擬母版頁基類,並讓每個母版頁都從此類繼承。我只能看到使用虛擬頁面基類的優點,以及許多缺點。最好的做法是使用母版頁,以減少它們的最佳效果,減少標記中的複製,並將其餘所需功能放入頁面類中。