首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 動態設置頁面標題兩種方法:內嵌表達式與 Literal 控件

     編輯:ASP.NET 基礎

前言

動態頁面標題對 SEO、瀏覽器標籤識別、書簽收藏至關重要。ASP.NET Web Forms 提供兩種原生方式:**內嵌代碼表達式** 與 **Literal 控件佔位**,本文詳解實現細節、優缺點對比、最佳實踐。

方法一:內嵌代碼表達式 (最簡潔)

1. .aspx 頁面


<head runat="server">
    <title><%= PageTitle %></title>
</head>

2. .aspx.cs 後台


public partial class NewsView : System.Web.UI.Page
{
    // 必須是 protected/public 字段,屬性需至少有 getter
    protected string PageTitle = "默認標題 - 網站名";
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // 從數據庫/模型獲取真實標題
            string title = GetNewsTitleFromDb(Request.QueryString["id"]);
            PageTitle = $"{title} - 新聞頻道 - 我的網站";
        }
    }
}

優缺點

優點缺點
代碼極少、無額外控件開銷標題必須在 `Page_Load` 前賦值 (或 `PreRender`),否則顯示默認值
直觀、符合 Web Forms 習慣若 MasterPage 也設置標題,需協調優先級

方法二:Literal 控件佔位 (靈活、支持 MasterPage)

1. .aspx 頁面 (設計視圖拖入 Literal → 切換源碼移至 <title> 間)


<head runat="server">
    <title>
        <asp:Literal ID="litPageTitle" runat="server" />
    </title>
</head>

2. .aspx.cs 後台


public partial class NewsView : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string title = GetNewsTitleFromDb(Request.QueryString["id"]);
            litPageTitle.Text = $"{title} - 新聞頻道 - 我的網站";
        }
    }
}

優缺點

優點缺點
可在任何事件中設置 (Load/PreRender/控件事件)額外控件實例、微小渲染開銷
完美配合 MasterPage:內容頁覆蓋母版頁標題設計時需手動移動 Literal 到 <title> 間 (VS 設計器不支持)
支持 HTML 編碼/腳本注入防護 (需手動處理)

MasterPage 場景最佳實踐

母版頁 Site.Master


<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server">默認網站標題</asp:ContentPlaceHolder></title>
</head>

內容頁 Content.aspx


<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <asp:Literal ID="litTitle" runat="server" />
</asp:Content>

protected void Page_Load(object sender, EventArgs e)
{
    litTitle.Text = "動態生成的頁面標題";
}

原理:`ContentPlaceHolder` 默認內容被 `Content` 覆蓋,`Literal` 渲染為純文本,最終輸出 `動態生成的頁面標題`。

SEO 優化擴展:動態 Meta 標籤


<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server"></asp:ContentPlaceHolder></title>
    <meta name="description" content="<asp:ContentPlaceHolder ID="MetaDescription" runat="server"></asp:ContentPlaceHolder>" />
    <meta name="keywords" content="<asp:ContentPlaceHolder ID="MetaKeywords" runat="server"></asp:ContentPlaceHolder>" />
</head>

總結

場景推薦方法理由
簡單頁面、無 MasterPage內嵌表達式 `<%= PageTitle %>`零控件、代碼最少
使用 MasterPage、需 SEO MetaLiteral + ContentPlaceHolder標準化、靈活、支持多標籤
標題需在按鈕點擊後動態變更Literal可在任何回發事件中設置

掌握兩種方法,根據項目架構選擇。現代 ASP.NET Core MVC/Razor Pages 推薦使用 `@ViewData["Title"]` 或 `@Model.Title`,原理相通。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved