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

ASP.NET MVC 頁面標題管理新模式:BaseController 統一格式化

     編輯:關於ASP.NET

痛點:ContentPlaceHolder 導致的重複與維護困境

<!-- Site.Master -->
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />

<!-- 每個 View 都要重複寫 -->
<asp:Content ContentPlaceHolderID="TitleContent" runat="server">
  CaraQ - 日記
</asp:Content>

站點標題變更需修改所有 View,違反 DRY 原則。

優雅解決方案:BaseController 統一格式化

public abstract class BaseController : Controller {
    private const string TitleFormat = "CaraQ - {0}";
    protected string PageTitle { get; set; }

    protected override void OnActionExecuted(ActionExecutedContext filterContext) {
        ViewData["Title"] = string.Format(TitleFormat, PageTitle ?? "");
        base.OnActionExecuted(filterContext);
    }
}

// 具體 Controller
public class DiaryController : BaseController {
    public ActionResult Index() {
        PageTitle = "日記";
        return View();
    }
    
    public ActionResult Detail(int id) {
        PageTitle = $"日記詳情 #{id}";
        return View();
    }
}

// Master 頁面簡單輸出
<title><%: ViewData["Title"] %></title>

進階擴展:支持區域/多語言

protected override void OnActionExecuted(ActionExecutedContext filterContext) {
    var area = RouteData.DataTokens["area"] as string;
    var prefix = string.IsNullOrEmpty(area) ? "CaraQ" : $"CaraQ.{area}";
    var culture = Thread.CurrentThread.CurrentUICulture.Name;
    
    ViewData["Title"] = $"{prefix} - {PageTitle} [{culture}]";
    base.OnActionExecuted(filterContext);
}

核心優勢

  • 標題格式集中管理,修改一處全站生效
  • Controller 決定標題內容,符合 MVC 職責分離
  • 支持動態標題(含 ID、參數、多語言)
  • View 完全無標題邏輯,純粹渲染
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved