在asp.net主页中附加到默认标题

时间:2009-03-23 19:33:30

标签: c# asp.net asp.net-mvc

我正在使用MVC通过内容占位符向母版页添加标题。默认的MVC母版页模板使用以下代码:

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server"/></title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

当我尝试将默认文本添加到内容持有者的前面时,它不会在最终呈现的页面中显示文本。我试图让页面显示一个带有附加的contentplaceholder文本的默认标题。

示例:
(默认文本)(ContentPlaceHolder文本)
我的页面 - 关于我们

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>My Page - <asp:ContentPlaceHolder ID="TitleContent" runat="server"/></title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

我正在寻找一种方法来实现这一点,而无需使用代码。有什么想法吗?

5 个答案:

答案 0 :(得分:9)

似乎我们应该使用

<asp:Literal runat="server" Text=" - MySite" />

而不是

<asp:LiteralControl runat="server" Text=" - MySite" />

在文章中提到,否则我们会收到“未知服务器标记”错误。

答案 1 :(得分:7)

在进一步观察之后,Phil Haack实际发布了一篇文章,这是我的问题的解决方案。它可以在Haacked找到。

总之,他说在头部渲染的所有东西都被渲染为一个控件,上面我的问题的解决方法是在标题中放置一个asp文字控件,让它正确生成文本。

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" /> 
    <asp:LiteralControl runat="server" Text=" - MySite" />
  </title>
</head>
...

答案 2 :(得分:4)

为什么?

<title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" />
    <%= "- My Site" %>
</title>

同样适用。没有麻烦?

答案 3 :(得分:2)

我更喜欢使用它:

<title>Site Name - <%=Page.Title%></title>

比使用文字控件更清洁..

答案 4 :(得分:1)

如果您正在使用MVC并将某个对象中的标题从控制器传递到页面,我将使用内联代码来显示它。

我们使用MVC contrib函数直接从母版页中的视图数据中获取类型化数据:

<head>
<title>My Page - <%= ViewData.Get<Model.Page>().Title %></title>
</head>

作为一个注意事项,我们已经从每个视图中删除了文件背后的所有代码,以使视图更清晰,我们发现这比为每个视图隐藏代码要好得多。