[英]Setting title of a page
我有一个使用母版页配置的ASP.NET应用程序。 我想做的两件事。
如何以编程方式在子页面中设置标题(如<title></title>
标记中的文本一样),并且,
如果子页面未设置标题,则希望母版页面自动检测到该页面并设置默认标题。
任何帮助,将不胜感激。
您可以让页面从自定义页面继承
public abstract class CustomPage : Page
{
public virtual string PageTitle {get{return String.Empty;}}
}
然后,在您的MasterPage的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对象,就一切准备就绪!
我所做的基本上与吉姆·舒伯特(Jim Schubert)的相同。 不过,我确实做了一个小的更改,在MasterPage的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的pageload中设置标题:
page.title = "my title"
要回答第二部分,您可以简单地将默认标题放在母版页的标签中,这样,如果您没有以编程方式进行设置,则它将保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.