16

使用母版页时,为视图设置 html 标题(在头部)的首选方式是什么?

一种方法是在 .aspx 文件中使用 Page.Title,但这需要在母版页中使用,这可能会与 HTML 代码混淆。所以,让我们假设没有服务器端控件,只有纯 html。有更好的想法吗?

更新:我想在控制器或模型中的视图中设置标题。

4

11 回答 11

33

在我们的母版页中,我们创建了一个“init”ContentPlaceHolder 和一个“title”ContentPlaceHolder。如果有人想以编程方式设置 Page.Title,他们可以在 CSharp 中的 init 占位符中设置它,或者他们可以使用标签覆盖“title”占位符。

母版页

<asp:ContentPlaceHolder id="init" runat="server"></asp:ContentPlaceHolder>
<head runat="server">    
    <asp:ContentPlaceHolder ID="title" runat="server">
        <title><%=this.Page.Title%></title>
    </asp:ContentPlaceHolder>
</head>

查看页面 可以覆盖整个“标题”内容占位符:

<asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server">
       <title>Home Page</title>
</asp:Content>

或以编程方式设置页面标题。

<asp:Content ID="Content1" ContentPlaceHolderID="init" runat="server">
    <%this.Title = "Home Page";%>
</asp:Content>

确保从顶部的 Page 指令中删除Title="",否则您将无法以编程方式更改 Page.Title。

于 2009-03-17T06:07:11.570 回答
11

我看到很多人使用该<%= ViewData["Title"] %>选项。

我想你也可以插入一个ContentPlaceHolder命名的标题,然后在你的页面上使用它,但是在我见过的所有 MVC 示例中,他们使用第一个选项。

于 2008-11-28T23:52:22.707 回答
2

当我创建一个新的 MVC 项目时,其中包含文件并使用母版页。看起来它似乎将标题作为 ViewData [“Title”] 传递给 ViewData,并且在母版页中,<head>有一个输出 ViewData [“Title”] 的脚本块。

于 2008-11-28T22:49:51.833 回答
1

我最终使用了一个代码隐藏文件来实现Page.Title="..."Page_Load()方法。

我不喜欢这样做,但是尝试直接在 .aspx 页面中实现更改不起作用,因为它导致出现两个<title>标签,一个是我生成的,一个是由页面继承的主文件生成的.

理想情况下,我的页面代码应该覆盖主文件的<title>值,但我想这只是 ASP.Net MVC 仍然存在的那些怪癖之一,并且可能已经在更新版本的 ASP.Net MVC 框架中修复(我们仍在使用 ASP.Net MVC Beta)

于 2009-03-10T13:09:04.940 回答
1

您可以在母版页中执行此操作:

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

其中 MyTitle = web.config 中的一些值或硬文本,如“我的网站”

现在在视图页面中(例如索引):

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
<%:"My Home Page"%>

现在,当您浏览主页时,标题将是“My Web :: My Home Page”。

于 2014-08-14T10:24:40.993 回答
0

我有一个从资源文件设置页面标题的基本视图类。对我来说效果很好。

于 2010-01-15T07:18:15.050 回答
0

我创建了一个名为 Application 的类,带有一个 Title 属性(使用 get/set):

public static class Application
{
    static string title;

    public static string Title
    {
        get { return title; }
        set { title = value; }
    }
}

然后我为每个页面设置Page_Load事件的属性:

Application.Title = "Silly Application";

然后我只是在母版页上引用该属性:

<div id="divApplicationTitle">
     <asp:HyperLink runat="server" NavigateUrl="~/Default.aspx"><asp:Image ID="imgApplicationImage" runat="server" SkinID="skinApplicationLogo" /><%=Application.Title%></asp:HyperLink> 
</div> 
于 2015-05-13T16:38:00.093 回答
-1

内容页面的 @Page 指令有一个 Title 属性。

于 2008-11-28T20:44:33.617 回答
-1

对于 ASP.NET 内容页面,只需添加Title=""占位<%@ %>符。

于 2008-12-03T00:11:43.383 回答
-4

我们结束了

<head runat=server visible=false>

在母版页中。

这样我们可以从 Page.Title 中读取(Page.Title 需要 head 元素存在,否则会抛出异常,使用反射器检查)。然后我们使用我们自己的头部元素——MVC 方式。

于 2008-12-02T14:44:25.260 回答
-8

您始终可以在视图页面中使用 javascript:

<script type="text/javascript>
    document.title = "Hello World";
</script>
于 2008-11-30T17:19:04.137 回答