如何将default.master中的默认标题应用到所有内容页面
如何将default.master中的默认标题应用到所有内容页面
第一步:先让内容页关联母版页
你的login.aspx(以及其他内容页)目前还没和母版页绑定,所以根本不会继承母版页的标题设置。先打开内容页,在最顶部的<%@ Page %>指令里加上MasterPageFile="~/default.Master",修改后示例如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="Front.Login" MasterPageFile="~/default.Master" %>
第二步:移除内容页里的独立头部和标题
现在内容页不需要自己写完整的<head runat="server">结构了,因为母版页已经包含了这部分。你需要把内容页里这段代码:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta name="robots" content="noindex"> <title>PortfolioOne™ Login</title> <!-- 你不需要这个标题,直接删掉 --> </head>
替换成Content控件,用来填充母版页头部的自定义内容(比如meta标签、脚本):
<asp:Content ID="ContentHead" ContentPlaceHolderID="PlaceHolderHead" runat="server"> <meta name="robots" content="noindex"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> </asp:Content>
注意:如果你的母版页
<head>里还没有PlaceHolderHead这个占位符,需要先在母版页的<head>里加一行:<asp:ContentPlaceHolder ID="PlaceHolderHead" runat="server" />这样内容页的自定义头部内容才能正确插入到母版页里。
第三步:控制标题的显示逻辑
看你母版页的标题结构:
<title> <asp:ContentPlaceHolder ID="PlaceHolderPageTitle" runat="server" /> Mytitlewebsite </title>
- 如果内容页不需要自定义标题前缀,不要填充
PlaceHolderPageTitle,最终页面标题就会直接显示Mytitlewebsite; - 如果某页需要自定义前缀(比如“登录 - Mytitlewebsite”),就添加一个Content控件绑定这个占位符:
<asp:Content ID="ContentPageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server"> PortfolioOne™ Login - </asp:Content>
要是想让分隔符自动处理,不用手动写“-”,可以优化母版页的标题逻辑:
<title> <asp:ContentPlaceHolder ID="PlaceHolderPageTitle" runat="server" /> <% var titleHolder = (ContentPlaceHolder)FindControl("PlaceHolderPageTitle"); if (!string.IsNullOrEmpty(titleHolder.Content)) { %> - <% } %> Mytitlewebsite </title>
这样内容页填了自定义标题就自动加分隔符,没填就只显示默认标题,更省心。
第四步:验证效果
保存所有修改后启动网站,打开login.aspx就能看到标题已经变成你想要的默认样式了,其他内容页按同样方法修改,就能统一使用母版页的默认标题啦。
备注:内容来源于stack exchange,提问作者Dilshan
相关产品推荐
相关产品推荐

