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

bh2*_*213 16 asp.net asp.net-mvc master-pages

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

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

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

And*_*tos 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>
Run Code Online (Sandbox Code Playgroud)

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

<asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server">
       <title>Home Page</title>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

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

<asp:Content ID="Content1" ContentPlaceHolderID="init" runat="server">
    <%this.Title = "Home Page";%>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

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


Hug*_*are 11

我看到很多人都使用这个<%= ViewData["Title"] %>选项.

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


bh2*_*213 -4

我们最终得到

<head runat=server visible=false>
Run Code Online (Sandbox Code Playgroud)

在母版页中。

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