如何从MasterPage操作ContentPlaceHolder内容

时间:2011-05-23 11:04:45

标签: asp.net master-pages

我想从主页后面的代码编辑ContentPlaceHolder的内容,请帮助我,你可以假设任何内容占位符的主页。

所有答案都会得到尊重。

1 个答案:

答案 0 :(得分:3)

如果内容更改是微不足道的,那么请考虑客户端操作,例如: jQuery的。

否则,你可以在ContentPlaceHolder的Controls集合上使用FindControl(),但这很麻烦。

更简洁的解决方案是利用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;
        }
    }
}

您的Masterpage代码隐藏可能是这样的:

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

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