C# 使用C从子页面更新asp.net主控的元标记#

C# 使用C从子页面更新asp.net主控的元标记#,c#,asp.net,meta,C#,Asp.net,Meta,我正在寻找一种方法来更新母版页中硬编码的metadescription和keywords标记。其中一个子页面动态生成这两个元标记,因此,我想动态添加它们。下面是我当前用于向页面添加键和描述的子页面的代码 protected void Page_Load(object sender, EventArgs e) { this.Page.Title = lblPackTitle.Text; System.Web.UI.HtmlControls.HtmlMeta metaTagKey =

我正在寻找一种方法来更新母版页中硬编码的meta
description
keywords
标记。其中一个子页面动态生成这两个元标记,因此,我想动态添加它们。下面是我当前用于向页面添加键和描述的子页面的代码

protected void Page_Load(object sender, EventArgs e)
{
    this.Page.Title = lblPackTitle.Text;
    System.Web.UI.HtmlControls.HtmlMeta metaTagKey = new System.Web.UI.HtmlControls.HtmlMeta();
    metaTagKey.Name = "Keywords";
    metaTagKey.Content = "This is my keyword text";
    this.Header.Controls.Add(metaTagKey);
    System.Web.UI.HtmlControls.HtmlMeta metaTagDesc = new System.Web.UI.HtmlControls.HtmlMeta();
    metaTagDesc.Name = "description";
    metaTagDesc.Content = "This is my description text";
    this.Header.Controls.Add(metaTagDesc);
}
它工作得很好,但这里的问题是,当呈现页面时,它宁愿生成2个“
描述
”和2个“
关键字
”标记,一个是母版页(硬编码),另一个是在页面加载时动态添加的

那么,是否有任何方法可以在每次呈现子页面时动态地更新母版页中已有的元标记,或者删除母版页上的元标记并只添加动态添加的元标记(从子页面)


我的项目在asp.net 3.5中,使用C#

将元内容项作为具有默认值的属性公开,并基于该属性进行渲染(事实上,您甚至不需要这样做,因为页面将公开属性,但您可能需要顶级主默认值,它可以查看页面的属性)。然后页面开始时没有元元素,如果未触及默认内容,则会写出默认内容,否则会写出修改后的内容:

public MetaTitle { get; set; }
public MetaDescription { get; set; }
public MetaKeywords { get; set; }

...

var tag = new HtmlMeta();
tag.Name = "description";
tag.Content = MetaDescription;
this.Header.Controls.Add(tag);

这些属性可以在请求生命周期管道上进一步设置,并由各个页面覆盖。没有重复。因此,关键是不要硬编码默认值,而是提供一些默认值以及这些设置的灵活性。

好吧,我找到了一个解决方案,因为它在渲染后看起来工作良好,我希望它在每种情况下都能正常工作

在我的母版页中,我用ID定义了我的
描述
关键字
标记,即
desc
,然后在我的子页面加载中:

protected void Page_Load(object sender, EventArgs e)
{
    this.Page.Title = lblPackTitle.Text;
    System.Web.UI.HtmlControls.HtmlMeta metaTagKey = new System.Web.UI.HtmlControls.HtmlMeta();
    metaTagKey.Name = "Keywords";
    metaTagKey.Content = "This is my keyword text";
    this.Header.Controls.Add(metaTagKey);
    System.Web.UI.HtmlControls.HtmlMeta metaTagDesc = new System.Web.UI.HtmlControls.HtmlMeta();
    metaTagDesc.Name = "description";
    metaTagDesc.Content = "This is my description text";
    this.Header.Controls.Add(metaTagDesc);
    //----------------------------Added here-----------------------------
    Control ctrlKeyMeta = this.Header.FindControl("key");
    Control ctrlDescMeta = this.Header.FindControl("desc");
    ctrlKeyMeta.Visible = false;
    ctrlDescMeta.Visible = false;
}

进一步问题:这将添加元描述作为标题部分中的最后一行项目。如果它最后一次出现在头部而不是顶部,真的会有区别吗

      protected void Page_Load(object sender, EventArgs e)
    {
        HtmlHead header1 = (HtmlHead)Master.FindControl("head1");

        header1.Controls.Remove(header1.FindControl("desc1"));

        HtmlMeta description = new HtmlMeta();
        //System.Web.UI.HtmlControls.HtmlMeta description = new System.Web.UI.HtmlControls.HtmlMeta();

        description.Name = "description";
        description.Content = "We are a family owned and operated painting company. We serve homeowners in Northern Virginia and Washington DC";

        this.Header.Controls.Add(description);
    }

你试过占位符吗?你是说占位符放在母版页的头部,然后在页面加载时更新相同的内容吗?感谢格兰特给它一个试验,但我不能让它进入我的头部;-),这对我来说似乎是一件很新鲜的事情,因为我是一个平庸的开发人员,而且
get;设置这对我来说是件新鲜事,你在这里说的话根本不明白,对不起。。。。。但如果你能用简单的语言来解释,那就太好了。