我有一個使用母版頁配置的ASP.NET應用程序。我想要做的是兩件事。設置頁面標題
我怎麼能programmically設置的子頁面標題(如在
<title></title>
標籤的文本?而且,如果孩子頁面沒有設置標題,我想的母版頁自動偵測並設置默認的標題。
任何幫助,將不勝感激。
我有一個使用母版頁配置的ASP.NET應用程序。我想要做的是兩件事。設置頁面標題
我怎麼能programmically設置的子頁面標題(如在<title></title>
標籤的文本?而且,
如果孩子頁面沒有設置標題,我想的母版頁自動偵測並設置默認的標題。
任何幫助,將不勝感激。
你可以有你的網頁,從一個自定義頁面
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對象,你就全都設置好了!
我的工作基本上與吉姆舒伯特的相同。我做的做,雖然一個小的變化,在母版的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是我的母語。)
在母版頁標記,這樣做:
<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";
}
你的第一個問題不應該:
Protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Title";
}
每個子頁面,取得成功?
您可以在母版的標題添加的ContentTemplate然後在aspx頁面從母版繼承添加的ContentPlaceHolder,然後在ASPX的頁面加載,你可以設置標題:
page.title = "my title"
回答第二部分,您可以簡單地將標籤中的默認標題放在母版頁中,這樣如果您沒有以編程方式設置它,那麼它將保持不變。
+1與我發佈的答案非常相似。 – 2011-02-07 22:53:01