2008-11-28 40 views
16

什麼是使用母版頁時設置html標題(頭部)以供查看的首選方式?ASP.NET MVC - 查看母版頁,如何設置標題?

一種方式是通過在.aspx文件中使用Page.Title,但在母版頁要求可能亂用HTML代碼。所以,讓我們假設沒有服務器端控件,只有純HTML。任何更好的想法?

更新:我想在視圖中設置標題而不是在控制器或模型中。

回答

-3

我們在母版頁中結束了

<head runat=server visible=false> 

這樣我們就可以從Page.Title讀取(Page.Title要求磁頭元件存在,否則它會引發異常,檢查與反射器)。然後,我們使用自己的頭元素 - MVC方式。

-1

內容頁面有@Page指令的Title屬性。

+1

是的,但我是sai如上所述,它需要在母版頁中的,這不是我想要的。 – bh213 2008-11-28 22:22:12

+1

然後你的問題是無意義的,因爲你說你想使用服務器端的構造來設置你的內容頁面的標題,但是你不想使用服務器端的構造。 – sliderhouserules 2008-11-29 21:00:28

+0

那麼,我想避免任何aspx控件。 吃掉了我們使用的一些html,我們可以解決這個問題,但是我寧願只使用純html。主頁面和控件應該是可以接受的。 – bh213 2008-11-30 13:28:46

2

當我創建一個新的MVC項目時,它有文件並使用母版頁。看起來,它似乎將標題傳遞給ViewData作爲ViewData [「Title」],並在主頁面<head>中有一個腳本塊輸出ViewData [「Title」]。

11

我看到了很多的使用<%= ViewData["Title"] %>選項的人。

我想你也可以插入名爲Title的ContentPlaceHolder,然後在你的頁面上使用它,但是在我見過的所有MVC示例中,它們都使用第一個選項。

-7

你總是可以使用JavaScript在您的視圖頁面:

<script type="text/javascript> 
    document.title = "Hello World"; 
</script> 
+0

不要這樣做,因爲JavaScript從來沒有100%給出。 – 2009-03-10 13:40:40

-1

對於ASP.NET內容網頁只需在<%@ %>佔位符添加Title=""

1

我結束了使用代碼隱藏文件來實現的Page_Load()方法Page.Title="..."

我不喜歡這樣做,但是直接在.aspx頁面中實現更改的嘗試不起作用,因爲它導致出現兩個<title>標記,我生成的標記和由主生成的標記文件從繼承的頁面。

理想情況下,我的頁面代碼應該已經覆蓋了主文件的<title>值,但我想這只是ASP.Net MVC仍然存在的那些怪癖之一,並且可能已經在更新版本的ASP中修復了這一點.NET MVC框架(我們仍然在ASP.Net MVC測試版)

32

在我們的主頁,我們創造了一個既「初始化」的ContentPlaceHolder,和「標題」的ContentPlaceHolder。如果有人想以編程方式設置Page.Title,他們可以在init佔位符中的CSharp中設置它,或者他們可以使用標籤覆蓋「標題」佔位符。

母版頁

<asp:ContentPlaceHolder id="init" runat="server"></asp:ContentPlaceHolder> 
<head runat="server">  
    <asp:ContentPlaceHolder ID="title" runat="server"> 
     <title><%=this.Page.Title%></title> 
    </asp:ContentPlaceHolder> 
</head> 

查看頁面 既可以覆蓋整個 「標題」 內容佔位符:

<asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server"> 
     <title>Home Page</title> 
</asp:Content> 

或編程設置頁面標題。

<asp:Content ID="Content1" ContentPlaceHolderID="init" runat="server"> 
    <%this.Title = "Home Page";%> 
</asp:Content> 

務必從Page指令在頂部取下標題=「」,否則你將不能夠通過編程修改Page.Title。

0

我有一個基本視圖類,它從資源文件中設置頁面標題。對我來說工作很好。

1

你可以在你的母版頁這樣做:

<title> 
    <%:MyTitle + " :: " %> 
    <asp:ContentPlaceHolder ID="TitleContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</title> 

其中MyTitle =從你的web.config或硬的文字,如「我的網站」

現在在視圖頁面的一些值(指數例如):

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
<%:"My Home Page"%> 

現在,當你瀏覽你的主頁,TI這將是「我的網頁::我的主頁」。

0

我創建(使用的get/set)調用一個Title屬性應用類:

public static class Application 
{ 
    static string title; 

    public static string Title 
    { 
     get { return title; } 
     set { title = value; } 
    } 
} 

我然後設置該屬性上的Page_Load事件的每一頁:

Application.Title = "Silly Application"; 

那麼我只是在主頁面上引用該屬性:

<div id="divApplicationTitle"> 
    <asp:HyperLink runat="server" NavigateUrl="~/Default.aspx"><asp:Image ID="imgApplicationImage" runat="server" SkinID="skinApplicationLogo" /><%=Application.Title%></asp:HyperLink> 
</div>