簡體   English   中英

使用C#從子頁面更新asp.net master的元標記

[英]Update meta tags of asp.net master from the child page with C#

我正在尋找一種方法來更新已在母版頁中進行硬編碼的元descriptionkeywords標簽。 子頁面之一動態生成這兩個meta標簽,因此,我想動態添加它們。 這是我當前用來向頁面添加鍵和描述的子頁面的代碼。

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中

好吧,我找到了一個解決方案,並且在渲染后看起來效果很好,我希望它在每種情況下都能正常工作。

在我的母版頁中,我用一個ID(即desckey定義了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);
    //----------------------------Added here-----------------------------
    Control ctrlKeyMeta = this.Header.FindControl("key");
    Control ctrlDescMeta = this.Header.FindControl("desc");
    ctrlKeyMeta.Visible = false;
    ctrlDescMeta.Visible = false;
}

將元內容項公開為具有默認值的屬性,然后基於該默認值進行呈現(實際上,您甚至不需要這樣做,因為頁面將公開這些屬性,但是您可能希望使用頂級主默認設置,因為頁面的屬性)。 然后,頁面開始時不包含任何meta元素,並且如果未觸及默認內容,則會寫出默認內容,否則將寫入更改后的內容:

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

可以在請求生命周期管道上進一步設置屬性,並由各個頁面覆蓋。 沒有重復。 關鍵的,那么,它不是硬編碼的默認值,但給一些默認與那些同樣的事情靈活性一起。

進一步的問題:這會將“元描述”添加為“標題”中的最后一個行項目。 如果最后一個位於頭部而不位於頂部,是否真的有所不同?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM