demoshop

demo, trying to be the best_

嗯...這標題看起來有點鳥,難道說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> 

這樣應該就是完美的解決了這問題吧^^

 

 

回應討論