<!-- Site.Master -->
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
<!-- 每個 View 都要重複寫 -->
<asp:Content ContentPlaceHolderID="TitleContent" runat="server">
CaraQ - 日記
</asp:Content>
站點標題變更需修改所有 View,違反 DRY 原則。
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);
}