在新的ASP.NET站点中,标题为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 :(得分:3)
请参阅此post。
答案 1 :(得分:2)
如果您使用了@Page指令的Title属性,则必须在每个视图中设置应用程序范围的标题,重复代码并违反单一责任原则。
答案 2 :(得分:1)
一种可能的解释(虽然这与您的简单示例无关) - 当您的<head>
元素中有脚本内容时,您无法添加runat =“server”或通过{{1}访问它}。例如(对不起,这是我的头脑):
Page.Head
在该示例中,使用ContentPlaceHolder将是一种无法以编程方式访问头部的方法。当然,您可能也可以使用<head>
<script type="text/javascript" src="<%= ResolveClientUrl("~/Scripts/script.js") %>"></script>
</head>
,这取决于您的偏好(个人而言,我会有点撕裂)。
答案 3 :(得分:0)
您不应该将您的视图视为在MVC中以编程方式与之交互的巨大对象,它们应该是用于生成html的轻量级模板。
如果您将自己的观点视为模板而不是对象,那么使用<ContentPlaceHolder />
使用runat="server"