ASP.NET MVC 設定Title 的技巧
- 2009-04-04
- 16911
- 0
嗯...這標題看起來有點鳥,難道說ASP.NET MVC 連標頭設定都是有難度的?
一般我們在製作網站的時候都會希望有個共同的Title就拿demo小鋪來說,不管你到那一頁都會看到Title最後會有「-demo小鋪」 字樣,這在ASP.NET內是一個很無聊的技巧,為什麼呢?因為只要加到MasterPage就好啦,到了ASP.NET MVC可就不一樣了...
一樣我們來建立一個新的MVC專案,就拿他內建的樣板來測吧,這是他原本的MasterPage對於Title的用法,是使用了ContentPlaceHolder來讓每一個View都可以加上自己的Title
<title> <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> </title>
想要讓每一個View都可以套上demo小鋪的字樣我們很自然的會想這樣加
<title> <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> -demo小鋪 </title>
然後你實際去run會發現怎麼完全沒反應,放前面放後面都沒反應,看似很不合邏輯,這是因為上面有一段<head runat="server">所以現在它本身就是一個控制項了,所以你這樣加會沒有效果當然你可以花時間去研究一下MSDN的AddParsedSubObject 這一篇,或是用個簡單一點的方法。再送他一個控制項,我們直接從工具箱拖曳一個很熟悉的控制項 Literal 放在ContentPlaceHolder之下
<title> <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> <asp:Literal ID="Literal1" runat="server" Text="-demo小鋪"></asp:Literal> </title>
這時候再Run一次就可以看到效果了,每一頁的Title後面都會正常的加上「-demo小鋪」 字樣了。
雖然說在ASP.NET MVC框架下是不建議使用Server Control但是還是可以用的,因為他還是屬於ASP.NET阿,如果你想研究在ASP.NET MVC框架下使用Server Control可以參考保哥的文章。
雖然說以上的方法就可以解決了這小問題,但是或許你和demo一樣有那種我就是不想看到Server Control出現在MVC框架,那還有一個很基本的解決方案就是直接把<head runat="server"> 拿掉....
<head> <title> <asp:ContentPlaceHolder ID="TitleContent" runat="server" />--demo小鋪 </title> </head>
這樣有個缺點就是當HEAD不再屬於控制項的時候那你就無法動態加上點什麼在Head區塊內了,不過如果你真的有需要加可以在挖一個洞阿...
<head> <title> <asp:ContentPlaceHolder ID="TitleContent" runat="server" />--demo小鋪 </title> <asp:ContentPlaceHolder ID="headContent" runat="server" /> </head>
這樣應該就是完美的解決了這問題吧^^
- http://haacked.com/archive/2009/04/03/tipjar-title-tags-and-master-pages.aspx
- http://msdn.microsoft.com/en-us/library/system.web.ui.control.addparsedsubobject.aspx
- http://blog.miniasp.com/post/2009/02/ASPNET-MVC-Developer-Note-Part-3-Dancing-with-WebForm.aspx
回應討論