利用Attribute扩展MVC的Title和Sitemap
開篇
無論是 Asp.net 還是 MVC 中,想要設置網站的 Title 或者 Sitemap (不用控件)總是很麻煩。
Title 和 Sitemap 都是有關聯的,所以有什么辦法可以 Write once, run anywhere 呢?
?
先看一下效果和用法吧~
[效果]
?
[用法:Controller中]
?
?
[用法:View中]
?
[用法總結]
只要在 Controller 和 Action 上加上 Attribute 就可以設置當前 Controller 的 名字和 Action 的名字。
?
設置 Controller 和 Action 的屬性
[NewPath("Demo", Controller = "Home", Action = "Index")] public class HomeController : Controller {[NewPath("首頁", Controller = "Home", Action = "Index")]public ActionResult Index(){ViewData["Message"] = "歡迎使用 ASP.NET MVC!";return View();}public ActionResult About(){this.SetNewPath("關于", new { Controller = "Home", Action = "About" });return View();} }這里,我這個網站名是Demo,那我給所有的 Controller 都加上 Demo 這個名稱和相關信息即可
然后,有兩張頁面,分別是“首頁”和“關于”
那我只要在 Action 上加上他們的名稱和相關信息即可
?
Q1:是否可以加多個 Attrubute?
A1:可以,而且可以設置 Order 來設置他們的順序
?
Q2:我需要,網站名、首頁、文章、文章標題 這樣的路徑怎么辦?
A2:代碼如下,除了可以在 Attrubute 中設置外,還可以在 Action 代碼中設置,因為有些信息需要經過處理后才能得到
[NewPath("Demo", Controller = "Home", Action = "Index", Order = 1)] [NewPath("首頁", Controller = "Home", Action = "Index", Order = 2)] public class HomeController : Controller {[NewPath("新聞", Controller = "News", Action = "Index")]public ActionResult Detail(int? id){this.SetNewPath("新聞標題", new {Controller = "News", Action = "detail", id = id.Value});return View();} }?
在View中顯示
一般把上圖的代碼放在 MasterPage 中,因為他們的用法都是調用同一個函數 ? 除了上面提供的兩個主要函數外,還有一個很自由的函數: ? <h2><%=Html.GetSitemap() %></h2> <h2><%=Html.GetWebPath("<a href=\"{1}\">{0}</a>", " / ") %></h2>
?
這里,只要傳入顯示模板和分隔符模板,就可以隨意地自定義內容了
?
源代碼和例子
下載地址
轉載于:https://www.cnblogs.com/dozer/archive/2010/12/05/MVC-Title-and-Sitemap.html
總結
以上是生活随笔為你收集整理的利用Attribute扩展MVC的Title和Sitemap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#获取文件(磁盘驱动器)的关联图标(使
- 下一篇: bcp+Sql语句抽取数据导出