用c#从子页面更新asp.net master的元标签

本文关键字:master net 标签 asp 更新 | 更新日期: 2023-09-27 18:11:23

我正在寻找一种方法来更新我的元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(硬编码),另一个是在页面加载时动态添加的。

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

我的项目是在asp.net 3.5与c#

用c#从子页面更新asp.net master的元标签

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

在我的主页上,我用一个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;
}

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

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

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

进一步问题:这将Meta Description添加为Head Section中的最后一行项。如果它最后在头部而不是在顶部,它真的有区别吗?

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