2009-12-29 5 views
1

У меня есть приложение ASP.NET, которое использует конфигурацию главной страницы. Я бы хотел сделать две вещи.Настройка заголовка страницы

  1. Как я могу programmically установить заголовок на странице ребенка (как в тексте в <title></title> теги? И

  2. Если страница ребенок не устанавливает заголовок, я бы хотел, главная страница автоматически обнаружит это и установить заголовок по умолчанию.

Любая помощь будет оценена.

ответ

5

вы можете иметь ваши страницы наследуют от пользовательской страницы

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

Тогда, в вашей странице_страницы MasterPage (не помню, существует ли MasterPage.Title, или вам нужно будет делать page.Title, который будет работать, поскольку оба объекта являются объектами страницы):

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"; }} 
} 

Таким образом, ваш MasterPage не 100% связаны с использованием CustomPage (создание нормальных страниц не будет сгенерировано сообщение об ошибке). И, если вы используете объекты CustomPage, вы все настроены!

2

То, что я делаю, в основном такое же, как у Джима Шуберта. Я сделать одно небольшое изменение, хотя, в PageLoad в Masterpage, я хотел бы сделать проверку условия, что-то вроде следующего:

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

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

Это то адреса указывают 2 из вас вопрос, так что пользовательские страницы не нужно указать title, но может просто вернуть String.Empty.

(Простите, если синтаксис не совсем прав, VB - это мой родной язык.)

+0

+1 за то, что он очень похож на ответ, который я разместил. –

0

В Master разметки, сделайте следующее:

<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

для 1-го вопроса не должно:

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

для каждого ребенка страницы, сделать трюк?

0

вы можете добавить ContentTemplate в заголовке MasterPage затем добавить ContentPlaceHolder на ASPX страницы, наследующих от MasterPage, то в PageLoad из ASPX вы можете установить название:

page.title = "my title" 

ответить во второй части вы можете просто поместить заголовок по умолчанию в тег на главной странице, чтобы, если вы не установили его программным образом, он останется прежним.

Смежные вопросы