2

如果我有一个具有以下视图的 ASP.NET MVC 2 Web 应用程序:

  1. 主.aspx
  2. 第1页.aspx
  3. Page2.aspx

并且所有视图都继承自一个名为Site.master的 MasterView ,

我希望能够为页面设置一个默认的Title/H1,它可以在派生视图中被覆盖。

例如 Main.aspx 将具有“MySite - xxx”,Page1.aspx 将具有“MySite - Page 1”,Page2.aspx 将具有“MySite - Page2”。

如果我选择不在新的派生视图中设置 Title/H1,则会显示主 Title/H1。

使用 WebForms,我将通过以下方式完成此操作:

  1. 在 master runat="server"上制作 Title/H1 标签
  2. 在主代码隐藏上公开受保护的属性
  3. 在派生页面代码隐藏的Page_Load上,设置属性( Master.Title = "Page 1")。
  4. 在主代码隐藏的Page_PreRender上,将Title/H1标签设置为“我的网站-”+标题;

我们如何使用 ASP.NET MVC 实现这一点?

我可以在主人身上做到这一点:

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

然后在视图中设置:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    MySite - Page 1
</asp:Content>

但我希望能够在视图中仅指定“第 1 页”,并且标题神奇地更改为“MySite - 第 1 页”。明白我的意思了吗?标题的“MySite -”部分需要是标题的模板。

我可能在这里遗漏了一些明显的东西。:)

4

3 回答 3

2

我通常是这样做的:

<title>MySite - <%: Page.Title ?? "Default title" %></title>

在您的 MasterPage 中。

然后,您可以Title像这样在内容页面上定义属性:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage"
         Title="Page 1"
%>

编辑:

好吧,您可能希望看到这个 SO 问题:ASP.NET MVC - View with master page, how to set title? .

于 2010-11-05T00:41:36.887 回答
2

通过快速搜索,我发现了这个:

http://haacked.com/archive/2009/04/03/tipjar-title-tags-and-master-pages.aspx

解释为什么

<title>MySite<asp:content..../></title>

不工作

于 2010-11-05T00:30:50.507 回答
0

正如您所描述的那样容易得多。

只需将内容占位符添加到您的母版页

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

然后在您的内容页面中将其用作

<asp:Content ID="Content3" ContentPlaceHolderID="PageTitle" runat="server">
    My Page
</asp:Content>

这种方式可行,但您必须使用 HTML HEAD 标记,而不是服务器控件。因此,只需runat="server"从您的 HEAD 中移除。

于 2010-11-05T00:24:47.130 回答