[英]C# ASP.NET Master Page and ChildPage - Assign strings from Child Page into Master Page
[英]Update meta tags of asp.net master from the child page with C#
我正在尋找一種方法來更新已在母版頁中進行硬編碼的元description
和keywords
標簽。 子頁面之一動態生成這兩個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(即desc
和key
定義了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);
//----------------------------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.