【问题标题】:Title on Master Page on ASP.Net MVCASP.Net MVC 母版页上的标题
【发布时间】:2013-02-26 04:48:21
【问题描述】:

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

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

在我写的每一页上

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

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

【问题讨论】:

    标签: asp.net asp.net-mvc page-title


    【解决方案1】:

    谢谢各位..我有解决办法

    如果您想从母版页中设置部分标题。例如,您可能希望每个页面的标题都以后缀“– 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>
    

    【讨论】:

    • 仅供参考,这对于 SEO 合规性/排名来说通常是一个坏主意。您的 TITLE 应该与您的第一个 H1 完全匹配,否则 Google 和 Bing 可能会报告错误。 eduncan911.com/blog/8-steps-to-seo-quickly.aspx
    • 谢谢。这正是我所需要的。 Razor 视图引擎使这变得更简单。哦,@eduncan911 我不确定这是否完全正确。 AFAIK Google 使用页面的 200 多个属性来确定它是关于什么的。我个人认为一些关键关键字应该在标题中,因为大多数网页都是关于某个核心主题的。
    【解决方案2】:

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

    创建一个您自己的继承自 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
    

    您也不需要内容占位符来更改标题。

    标签已经是一个 runat 服务器控件。在页面加载(或更早的事件)中设置 Page.Title 就可以了。

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

    【讨论】:

      【解决方案3】:

      最简单的方法:

      将当前的ContentPlaceHolder 移动到您的HTML 中,并将其包装在&lt;asp:PlaceHolder runat="server" visible="false"/&gt; 中。当您稍后需要它时,只需将 ContentPlaceHolder 再次移回即可。

      【讨论】:

      • 我无法从标题中移动它,但我设置了 Visible="false" 我的标题<contentplaceholder id="TitleContent" runat="server" visible="false"></contentplaceholder> ,还是不行
      • 你需要新建一个&lt;asp:PlaceHolder&gt;,比如&lt;asp:PlaceHolder runat='server' Visible='false'&gt;&lt;asp:ContentPlaceHolder ... /&gt;&lt;/asp:PlaceHolder&gt;
      【解决方案4】:

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

      【讨论】:

      • 它是 MVC,最好完全避免整个页面事件。
      【解决方案5】:

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

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

      编码愉快。

      【讨论】:

      • 这不起作用。我这样做了 My Title<contentplaceholder id="TitleContent" runat="server" visible="false"></contentplaceholder> 和所有页面 但它仍然无法正常工作
      猜你喜欢
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      相关资源
      最近更新 更多