2009-06-29 25 views
5

在一個新的ASP.NET網站沒有爲標題的ContentPlaceHolder:爲什麼在ASP.NET MVC中,標題是否有ContentPlaceHolder?

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 

在頁面:

<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server"> 
    About Us 
</asp:Content> 

這是爲什麼?爲什麼不能在頁面指令中使用title屬性/屬性?

<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

兩種方法都有相同的結果。對我來說,ContentPlaceHolder方法好像是hackish

如果你需要一個動態標題,你可以做這樣的aspx頁面:

<%= this.Title = "About Me" %> 
+0

我也很想知道。 – Solmead 2009-06-29 18:33:28

回答

1

一個可能的解釋(雖然這是不相關爲您簡單的例子) - 當你有腳本您的<head>元素中的內容無法添加runat =「server」或通過Page.Head訪問它。例如(抱歉,這是我的頭頂部):

<head> 
<script type="text/javascript" src="<%= ResolveClientUrl("~/Scripts/script.js") %>"></script> 
</head> 

在使用的ContentPlaceHolder這個例子是變圓不能夠以編程方式訪問頭的一種方式。當然,你可能也可以使用<title><%= Page.Title %></title>,這取決於你的喜好(我個人會有點撕裂)。

0

您不應該將您的視圖看作是您在MVC中以編程方式進行交互的巨大對象,它們應該是用於生成html的輕量級模板。

如果你覺得你的看法爲模板,而不是對象,用<ContentPlaceHolder />然後使用runat="server"

2

如果您使用了@Page指令的Title屬性,則必須在每個視圖中爲應用程序範圍設置一個重複代碼並違反單一責任原則。

相關問題