demoshop

demo, trying to be the best_

現在SEO是網站開發人員越來越需要注意的部份了(或許加上這條可多收一點錢)Title是一個重要的部份之前有寫過【ASP.NET MVC 設定Title 的技巧】來說明在ASP.NET MVC內要怎麼動態變換Title,今天要來介紹進階一點的技巧。

依據之前寫的【ASP.NET MVC 設定Title 的技巧】是可以動態改變Title沒錯,但有些時候我們會希望首頁的Title是不一樣的,比如demo小舖的首頁 Title就和其他內頁不相同,所以用上面的方法就無法做到而且寫法還滿煩人的,有一堆地方要注意因此立刻來修改一下。

首先把MasterPage的「TitleContent」挖掉然後利用demo之前介紹的【ASP.NET MVC 判斷是否為指定頁面的 Helper】來去判定是否為首頁,因此整個Title標籤就變成這樣

<title> 
<%=Html.IsCurrentAction("Home","Index")?"demo小鋪 - 創作、分享、交流的園地":ViewData["PageTitle"]+" - demo小鋪" %>
</title>

依據上面的寫法就是首頁的時候顯示demo小鋪 - 創作、分享、交流的園地,如果不是首頁就會出現由Controller指定的Title後面加上「- demo小鋪」,這樣子就不需要設定每一個View了比之前的方法更簡單了。


後端的Controller一樣是指定

ViewData["PageTitle"] = "測試文章頁面"; 

這樣就可以了。


看起來已經很好用了,但是還是有可以加強的部份,每次都要打ViewData["PageTitle"]還滿麻煩的,而且要是不小心打錯字就很難找問題了,因此在來介紹怎麼把它改成強式型別。

 

首先在Controller資料夾內建立一個新的Class,命名為BaseController,內容如下

using System;
using System.Web.Mvc;
namespace MvcApplication.Controllers
{
    public class BaseController : Controller
    {
        public string PageTitle
        {
            set
            {
                ViewData["PageTitle"] = value;
            }
        }
    }
} 

然後開啟所有的Controller將最上面修改成繼承BaseController

//原本是直接繼承到Controller
public class HomeController : Controller
//改成繼承BaseController
public class HomeController : BaseController

 完成以上修改後就可以在每個Action使用PageTitle來指定 頁面的Title了

//ViewData["Title"] = "測試文章頁面";
PageTitle = "測試文章頁面";

使用了這種寫法,對於維護上相信是更方便的,畢竟鬆散型別的除錯難度是相對較高的。

回應討論