2009-12-29 97 views
1

我有一個使用母版頁配置的ASP.NET應用程序。我想要做的是兩件事。設置頁面標題

  1. 我怎麼能programmically設置的子頁面標題(如在<title></title>標籤的文本?而且,

  2. 如果孩子頁面沒有設置標題,我想的母版頁自動偵測並設置默認的標題。

任何幫助,將不勝感激。

回答

5

你可以有你的網頁,從一個自定義頁面

public abstract class CustomPage : Page 
{ 
    public virtual string PageTitle {get{return String.Empty;}} 
} 

然後繼承,在你的母版的Page_Load中,做(不記得MasterPage.Title是否存在,或者如果你必須做Page.Title,這將起作用,因爲兩個對象都是Page對象):

if(Page is CustomPage) {  
     this.Page.Title = ((CustomPage)Page).PageTitle; 
    } else { 
     this.Page.Title = "Default Title"; 
    } 

然後,當你創建一個頁面,例如一個頁面的CustomerManager:

public partial class CustomerManager : CustomPage 
{ 
    public override string PageTitle { get{return "Customer Manager"; }} 
} 

這樣,你的母版是不是100%依賴於使用CustomPage(創建正常的網頁不會引發錯誤)。而且,如果你使用CustomPage對象,你就全都設置好了!

2

我的工作基本上與吉姆舒伯特的相同。我做的做,雖然一個小的變化,在母版的pageLoad的,我會做一個條件檢查,類似如下:

if(Page is CustomPage) { 
    var cp = (CustomPage)Page; 

    this.Title = (String.IsNullOrEmpty(cp.PageTitle)) ? 
     "Master's Default Title" : 
     cp.PageTitle; 
} 

這就地址2點你的問題,讓您的自定義頁面無需指定標題,但可以返回String.Empty。

(原諒如果語法不完全正確,VB是我的母語。)

+0

+1與我發佈的答案非常相似。 – 2011-02-07 22:53:01

0

在母版頁標記,這樣做:

<head runat="server" id="hd"> 
    <title></title> 
</head> 

然後,在後面的代碼(假設AutoEventWireup="false"):

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    if (String.IsNullOrEmpty(this.mhd.Title)) 
     this.hd.Title = "Master Title"; 
} 

然後在你的頁面,您可以以聲明方式設置標題:

<%@ Page Title="Page Title" . . . %> 

或以編程方式:

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    this.Title = "Page Title"; 
} 
0

你的第一個問題不應該:

Protected void Page_Load(object sender, EventArgs e) 
{ 
     Page.Title = "Title"; 
} 

每個子頁面,取得成功?

0

您可以在母版的標題添加的ContentTemplate然後在aspx頁面從母版繼承添加的ContentPlaceHolder,然後在ASPX的頁面加載,你可以設置標題:

page.title = "my title" 

回答第二部分,您可以簡單地將標籤中的默認標題放在母版頁中,這樣如果您沒有以編程方式設置它,那麼它將保持不變。