【发布时间】:2011-06-09 10:05:58
【问题描述】:
我正在使用带有 aspx View 而不是 Razor View 的 ASP.NET MVC 2 & 3,我的问题是:
如何在 Site.Master 页面中设置标题?我希望每个使用 Site.Master 页面的页面都可以在页面标题之后添加一个主标题,如:“Index -MasterTitle”; “关于-MasterTitle”。
我在 Site.Master 页面中尝试过,但它不起作用:
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" />
-MasterTitle
</title>
所以我尝试使用 asp:Literal server control:
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" />
<asp:Literal runat="server">-MasterTiltle</asp:Literal>
</title>
或者:
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" />
<asp:Literal runat="server" Text="-MasterTiltle"></asp:Literal>
</title>
很好,问题解决了,不过后来我想从web.config中加载MasterTitle的值,我试了一下:
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
<asp:Literal runat="server">
<%: System.Web.Configuration.WebConfigurationManager.AppSettings["SiteTile"] %>
</asp:Literal>
</asp:Literal>
编译器告诉我一个服务器控件不能包含子控件,所以我尝试另一个:
<title>
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
<asp:Literal ID="ltlTitleBack" runat="server" Text='<%: System.Web.Configuration.WebConfigurationManager.AppSettings["SiteTile"] %>' >
</asp:Literal>
</title>
编译器没问题,但不是我想要的答案,因为它显示:“pagetilte "
后来我在这里找到了解决这个问题的方法:CodeExpressionBuilder
但我认为这不是一个合适的解决方案,因为我应该设置太多与 ASP MVC 无关的东西。有没有更好的方案可以解决这个问题?
注意:
- 我不想在每个页面而不是 Site.Master 页面中设置 MasterTitle 的值,这是一种愚蠢的方式。
- 我不想在 Controller 或 Action 或 Model 中设置 MasterTitle 的值,这是不对的。
- 我不想通过 ViewData 设置 MasterTitle 的值。
- 我不想使用CodeExpressionBuilder。
- 我没有使用 Razor View。
感谢您的帮助。
编辑:实际上我想要类似 web.config 的东西,这样我就可以在服务器运行时更改 MasterTitle 的值。 :)
【问题讨论】:
-
您能否详细说明您提出的第一种方法有什么问题?在我看来,它是最好的,并且最容易根据您的需求量身定制
-
@Zruty:是的,我同意你的观点,我坚持在“答案”和“正确答案”之间做一些事情。 :)
标签: asp.net-mvc asp.net-mvc-3 master-pages title