1

要管理页面上的页面标题,我有一个母版页,我正在使用 ContentPlaceHolder。

  <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" />  </title>

在我写的每一页上

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">Some Title Here
</asp:Content>

现在我的客户要求我删除所有页面上的标题并将其保留在母版页上,但不删除所有页面和母版页上的内容占位符代码,以便将来如果有任何要求,我们可以将数据插入其中。所以我的问题是没有在母版页和页面上删除它们我无法在母版页上放置标题。那么我该如何处理这种情况?

4

5 回答 5

2

谢谢伙计们..我得到了解决方案

如果您想从母版页中设置部分标题。例如,您可能希望每个页面的标题都以后缀“-MySite”结尾。

如果您尝试此操作(请注意 - MySite 已添加):

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

并运行页面,你会发现--MySite 没有渲染。这似乎是 HtmlHead 控件的一个怪癖。这是因为 HtmlHead 控件中的标题标签现在本身就是一个控件。

修复非常简单。像这样将您的文本添加到 LiteralControl。

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" /> 
    <asp:Literalrunat="server" Text=" - MySite" />
  </title>
</head>
于 2010-01-11T08:01:34.347 回答
1

如果您想要一个很好的解决方案来覆盖页面标题:

创建您自己的继承自 System.Web.Mvc.ViewPage 的类。

让您的视图页面继承自该类:

在您的新类中编写一个 Page_Load 处理程序,执行如下操作:

Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
   Me.Title = "Company Name | " + Page.Title
End Sub

您也不需要内容占位符来更改标题。<head> 标签已经是一个 runat 服务器控件。在页面加载(或更早的事件)中设置 Page.Title 工作得很好。

您也可以在母版页中放置一个 runat 服务器脚本标记来完成此任务。

于 2010-01-11T15:09:44.690 回答
0

最简单的方法:

将当前的ContentPlaceHolder某处移动到您的 HTML,并将其包装在<asp:PlaceHolder runat="server" visible="false"/>. 当您稍后需要它时,只需将 ContentPlaceHolder 再次移回即可。

于 2010-01-11T07:32:39.087 回答
-1

使用母版页上的 OnPreRender 事件来设置标题,覆盖在每个页面上设置的内容。

于 2010-01-11T07:28:57.867 回答
-1

为什么不将属性 Visible=false 添加到母版页的 ContentPlaceHolder

我认为这是处理您的情况的最简单方法。

快乐编码。

于 2010-01-11T07:43:40.010 回答