2009-06-29 34 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属性,则必须在每个视图中为应用程序范围设置一个重复代码并违反单一责任原则。

相关问题