demoshop

NEWS

demo, trying to be the best.

站內搜尋載入中...

ASP.NET MVC 設定Title 的技巧

  • 3414
  • 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> 

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