1

我正在寻找一种方法来更新已在我的母版页中硬编码的元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 个“ description”和 2 个“ keyword”标签,一个是 MasterPage(硬编码),另一个是在页面加载时动态添加的.

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

我的项目在带有 C# 的 asp.net 3.5 中

4

3 回答 3

2

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

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

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;
}
于 2013-04-30T09:18:50.190 回答
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);
    }
于 2014-07-12T21:33:27.417 回答
0

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

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

这些属性可以在请求生命周期管道上进一步设置,并被各个页面覆盖。没有重复。那么,关键是不要硬编码默认值,而是给出一些默认值以及这些相同事物的灵活性。

于 2013-04-30T08:17:45.930 回答