我有一个使用母版配置的ASP.NET应用程序。我想做的是两件事。
如何在子页面中以编程方式设置标题(如<title></title>
标签中的文字?
如果子页面未设置标题,我希望母版页自动检测并设置默认标题。
任何帮助都将不胜感激。
答案 0 :(得分:5)
您可以让您的网页继承自定义网页
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";
}
然后,当您创建一个Page,例如CustomerManager页面时:
public partial class CustomerManager : CustomPage
{
public override string PageTitle { get{return "Customer Manager"; }}
}
这样,您的MasterPage与使用CustomPage不是100%绑定(创建普通Pages不会引发错误)。而且,如果您使用CustomPage对象,那么您已经完成了设置!
答案 1 :(得分:2)
我所做的与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就是我的母语。)
答案 2 :(得分:1)
答案 3 :(得分: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";
}
答案 4 :(得分:0)
第一个问题不应该:
Protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Title";
}
对于每个子页面,诀窍?
答案 5 :(得分:0)
你可以在masterpage的标题处添加一个contenttemplate,然后在继承自masterpage的aspx页面上添加一个contentplaceholder,然后在aspx的pageload中你可以设置标题:
page.title = "my title"
要回答第二部分,您可以简单地将标题中的默认标题放在母版页上,这样如果您没有以编程方式设置它,那么它将保持不变。