Как манипулировать контентом ContentPlaceHolder из мастер-страницы - PullRequest
1 голос
/ 23 мая 2011

Я хочу отредактировать содержимое ContentPlaceHolder из кода позади главной страницы, помогите, пожалуйста, вы можете использовать любую мастер-страницу с любым заполнителем содержимого.

Все ответы будут учтены.

1 Ответ

3 голосов
/ 23 мая 2011

Если изменения содержимого тривиальны и косметичны, рассмотрите возможность манипулирования на стороне клиента, например, jQuery.

В противном случае вы могли бы использовать FindControl () для коллекции Controls ContentPlaceHolder,но это чревато и грязно.

Более точное решение - воспользоваться преимуществом Полиморфизм .Вызывающая страница доступна из свойства Page MasterPage.

Итак: если у вас есть такой интерфейс:

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";
    }
}
...