2011-05-23 70 views
1

我想從母版頁後面的代碼中編輯ContentPlaceHolder的內容,請幫助我,您可以假定任何母版頁都帶有任何內容佔位符。如何從母版頁操作ContentPlaceHolder內容

所有答案都會得到尊重。

+0

我寧願說它反對主內容。你能解釋爲什麼你需要這個嗎? – naveen 2011-05-23 11:09:55

回答

3

如果內容變化很瑣碎和美觀,請考慮客戶端操縱,例如, jQuery的。

否則,你可能使用FindControl()通過ContentPlaceHolder的集合Controls,但這是充滿和雜亂。

整潔的解決方案是利用Polymorphism。呼叫頁面可從MasterPage的Page屬性中獲取。

所以:如果你有像這樣的接口:

public interface IContentInjectable 
{ 
    Literal ExposedLiteral { get; } 
} 

和你的頁面模板中實現像這樣:

<%@ Page Language="C#" MasterPageFile="~/MasterPages/Test.master" AutoEventWireup="true" Inherits="TestPage" Codebehind="TestPage.aspx.cs" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="phContent" Runat="Server"> 

    <asp:Literal ID="litTest" runat="server" /> 

</asp:Content> 

隨着後臺代碼,如:

public partial class TestPage : System.Web.UI.Page, IContentInjectable 
{ 
    public Literal ExposedLiteral 
    { 
     get 
     { 
      return litTest; 
     } 
    } 
} 

您的母版頁代碼可能是這樣的:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    IContentInjectable icPage = this.Page as IContentInjectable; 
    if (icPage != null) 
    { 
     icPage.ExposedLiteral.Text = "Test Text"; 
    } 
} 
+0

當查找控件是一行時,這看起來好像很多額外的代碼。寫的痛苦,但可能沒有如界面等比較 – 2011-05-23 12:27:59

相關問題