我正在使用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>
我正在寻找一种方法来实现这一点,而无需使用代码。有什么想法吗?
答案 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>
作为一个注意事项,我们已经从每个视图中删除了文件背后的所有代码,以使视图更清晰,我们发现这比为每个视图隐藏代码要好得多。