在使用母版页时,设置视图的html标题(在head标签中)的首选方法是什么?
一种方法是在.aspx文件中使用Page.Title,但这需要在母版页中添加<asp:contentplaceholder>
,这可能会混淆HTML代码。因此,假设没有服务器端控件,只有纯html。还有更好的想法吗?
更新:我想在视图中设置标题,而不是在控制器或模型中设置。
在使用母版页时,设置视图的html标题(在head标签中)的首选方法是什么?
一种方法是在.aspx文件中使用Page.Title,但这需要在母版页中添加<asp:contentplaceholder>
,这可能会混淆HTML代码。因此,假设没有服务器端控件,只有纯html。还有更好的想法吗?
更新:我想在视图中设置标题,而不是在控制器或模型中设置。
在我们的母版页中,我们创建了一个“init” ContentPlaceHolder和一个“title” ContentPlaceHolder。如果有人想以编程方式设置Page.Title,他们可以在init占位符中用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>
查看页面 可以覆盖整个 "title" 内容占位符:
<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。
我看到很多人使用 <%= ViewData["Title"] %>
选项。
我想你也可以插入一个名为“Title”的ContentPlaceHolder
,然后只需在页面上使用它,但在我看过的所有MVC示例中,它们都使用第一种选项。
<head>
中有一个脚本块,输出ViewData["Title"]。最终我采用了code-behind文件来实现在Page_Load()
方法中使用Page.Title="..."
。
虽然我不太喜欢这样做,但是直接在.aspx页面中尝试实现更改并没有成功,因为这导致了两个<title>
标签的存在,一个是我生成的,另一个是该页面从Master文件继承而来生成的。
理想情况下,我的页面代码应该覆盖主文件的<title>
值,但我猜这只是ASP.Net MVC仍然存在的小问题之一,并且在ASP.Net MVC框架的新版本中可能已经得到修复(我们仍在使用ASP.Net MVC Beta)。
你可以在你的母版页中这样做:
<title>
<%:MyTitle + " :: " %>
<asp:ContentPlaceHolder ID="TitleContent" runat="server">
</asp:ContentPlaceHolder>
</title>
在这里,MyTitle可以从您的web.config中获取某个值,或者硬编码为"My Web"。
现在在视图页面(例如Index)中:
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
<%:"My Home Page"%>
现在当您浏览您的主页时,标题将会是"My Web :: My Home Page"。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>
我有一个基础视图类,可以从资源文件设置页面标题。对我来说效果不错。
内容页的@Page指令有一个Title属性。
<%@ %>
占位符中添加 Title=""
即可。我们最终得到了
<head runat=server visible=false>
在主页面中。
这样我们就可以从Page.Title读取(Page.Title需要head元素存在,否则会抛出异常,使用反射器进行了检查)。然后我们使用自己的head元素 - MVC方式。