我的网站上有很多页面。我有4个主页,所有页面都使用。每个页面使用不同的css,JavaScript包含head标签内部。我想通过调用引用数据库表的类来添加标题,元描述和元关键字标签。但是,我无法找到一种方法将页面或HthmlHead对象传递给类,而不会抛出错误。我试过做
HtmlHead head = Page.Header;
Page.Controls.Remove(Page.FindControl("HeadElement"));
Page.FindControl("HtmlElement").Controls.AddAt(0,HeaderText.getHeaderText(head, Request.Url.AbsolutePath));
和
Page = p2
Page = HeaderText.getHeaderText(p2, Request.Url.AbsolutePath));
在这两种情况下,我都改变了我的类HeaderText.getHeaderText,以根据我的工作返回页面或HtmlHead类型。我将课程设置为如下所示:
public class HeaderText
{
private HeaderText() { }
public static HtmlHead getHeaderText(HtmlHead head, String URL)
有更好或更简单的方法吗?
答案 0 :(得分:1)
您可以尝试以下两种建议之一:
1)使您的母版页都有一个HeadContentPlaceHolder,它存在于不具有 runat =“server”属性的标记内。然后你可以随意操纵这些内容。
<head>
<link ....>
<script....>
<meta......>
<asp:ContentPlaceHolder runat="server" ID="headContentPlaceHolder"></asp:ContentPlaceHolder>
</head>
您还可以使用Page.Title轻松地从每个页面设置标题
2)在每个内容页面上使用 MasterType 引用
<%@ MasterType TypeName="My.App.MasterPage" %>
因此,如果您的主页面类中有“SetHeaderElements”方法,则可以从具有该MasterType定义的每个内容页面调用它们
Page.Master.SetHeaderElements(meta, css, js);
您还可以尝试避免在每个内容页面中使用此代码,方法是使用返回主页面的PageBase类
public class PageBase : Page
{
public IMasterPage MasterPage { get { return Page.Master as IMasterPage; }}
}
然后使用SetHeaderElements()方法创建一个IMasterPage接口,让每个MasterPage类实现此接口。