从类中向HtmlHead对象添加多个元素

时间:2010-02-01 18:04:04

标签: c#

我的网站上有很多页面。我有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)

有更好或更简单的方法吗?

1 个答案:

答案 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类实现此接口。