ASP.NET MVC - 使用母版页查看,如何设置标题?

时间:2008-11-28 20:40:14

标签: asp.net asp.net-mvc master-pages

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

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

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

11 个答案:

答案 0 :(得分:32)

在我们的母版页中,我们创建了一个“init”ContentPlaceHolder和一个“标题”ContentPlaceHolder。如果有人想以编程方式设置Page.Title,他们可以在初始占位符的CSharp中设置它,或者他们可以使用标记覆盖“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。

答案 1 :(得分:11)

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

我想你也可以插入一个名为Title的ContentPlaceHolder,然后在你的页面上使用它,但在我见过的所有MVC例子中,他们都使用了第一个选项。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我最终使用代码隐藏文件在Page.Title="..."方法中实现Page_Load()

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

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

答案 4 :(得分:1)

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

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

其中MyTitle = web.config中的某个值或“My Web”等硬文本

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

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

现在,当您浏览主页时,标题将是“我的Web ::我的主页”。

答案 5 :(得分:0)

我有一个基本视图类,用于设置资源文件中的页面标题。对我来说非常好。

答案 6 :(得分: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> 

答案 7 :(得分:-1)

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

答案 8 :(得分:-1)

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

答案 9 :(得分:-3)

我们结束了

<head runat=server visible=false>

在母版页中。

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

答案 10 :(得分:-7)

您可以随时在视图页面中使用javascript:

<script type="text/javascript>
    document.title = "Hello World";
</script>