【问题标题】:Appending to default title in asp.net masterpage附加到 asp.net 母版页中的默认标题
【发布时间】:2009-03-23 19:33:29
【问题描述】:

我正在使用 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 文本)
我的页面 - 关于我们

<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>

我正在寻找一种无需使用代码即可完成此任务的方法。有什么想法吗?

【问题讨论】:

  • 从 head 标签中去掉 runat="server" 会发生什么?就我个人而言,我会将其设置为控制器操作中的 ViewData["PageTitle"] 之类的东西。
  • 从我开始测试以寻找可能的解决方案时,无论 runat="server" 标签是否存在,它的行为似乎都是一样的。

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


【解决方案1】:

看来我们应该使用

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

而不是

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

在文章中提到,否则我们会得到“Unknown server tag”错误。

【讨论】:

    【解决方案2】:

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

    总而言之,他说在头部呈现的所有内容都呈现为控件,我上面的问题的解决方法是在标题中放置一个 asp 文字控件以使其正确生成文本。

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

    【讨论】:

    • 正如 Alexander 所说,这会导致 Unknown Server Tag 异常。
    • 尝试使用“Literal”而不是“LiteralControl”
    【解决方案3】:

    为什么?

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

    同样有效。没有麻烦?

    【讨论】:

      【解决方案4】:

      我更喜欢用这个:

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        值得注意的是,我们已经从每个视图中删除了所有代码隐藏文件,以使视图更清晰易读,我们发现这比为每个视图都隐藏代码要好得多。

        【讨论】:

        • 这可以解决问题,但我正在尝试找到一种解决方案,该解决方案只能在母版页上包含“我的页面”文本。这样标题就改变了,不需要在每个视图上都改变。感谢您的回复。
        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        相关资源
        最近更新 更多