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

时间:2013-04-30 08:10:15

标签: c# asp.net meta

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

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个“description”和2个“keyword”标签,一个MasterPage(硬盘)编码)和另一个,是在页面加载时动态添加的。

那么,有没有办法只是动态地更新母版页中已有的元标记,或者只是删除母版页上的元标记,并且每次渲染子页面时只添加动态添加的(从子页面)?

我的项目是使用C#

在asp.net 3.5中

3 个答案:

答案 0 :(得分:2)

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

在我的母版页中,我使用ID定义了我的descriptionkeywords标记,即desckey,之后在我的子页面加载我做了:

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;
}

答案 1 :(得分:0)

将元内容项公开为具有默认值的属性并根据它进行渲染(事实上,您甚至不需要这样做,因为页面将公开属性,您可能需要顶级主默认值,查看Page的属性)。然后页面以没有元素的方式开始,如果它们未被触及,则写出默认内容,否则更改的内容将被写入:

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);

可以在请求生命周期管道上进一步设置属性,并由单个页面覆盖。没有重复。关键是,对默认值进行硬编码,但提供一些默认值以及相同内容的灵活性。

答案 2 :(得分:0)

赞助问题:这会将元描述添加为主题部分中的最后一个项目。如果最后一个在头部而不在顶部,它真的会有所作为吗?

      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);
    }