asp.net: наследование главных страниц не наследует заполнители? - PullRequest
3 голосов
/ 13 июля 2011

Представьте, что у вас есть две мастер-страницы:

MasterPage "A": PlaceHolder-A1 PlaceHolder-A2

MaterPage "B": (наследуется от A) Заполняет "PlaceHolder-A1"

Мне нужно создать обычную страницу HTML aspx, которая наследуется от "B" и заполняет "PlaceHolder-A2" (из MasterPage "A")?

Как я могу это сделать?

Единственный способ, который я нашел, - это перевести «PlaceHolder-A2» вниз в MasterPage «B» с помощью заполнителя «PlaceHolder-B1», который пуст и находится внутри »PlaceHolder-A2" .Страница должна заполнить "PlaceHolder-B1" тогда.

Есть ли более простой способ сделать это?

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 13 июля 2011

Поскольку ваш вопрос заключается в том, есть ли "более простой" способ сделать это, я бы сказал, что ответ - нет.На самом деле все, что вам нужно сделать, это убедиться, что заполнители контента распространяются вниз по каждой главной странице.Вы даже можете использовать то же имя.Я все время использую вложенные мастер-страницы и, например, всегда распространяю местозаполнитель для области <head> страницы:

<asp:Content ID="Content1" ContentPlaceHolderID="Head" runat="Server">
    <asp:ContentPlaceHolder ID="Head" runat="server">
    </asp:ContentPlaceHolder>
</asp:Content>

Я не понимаю, что в этом такого сложного?У вас нет доступа, чтобы изменить одну из главных страниц по какой-то причине?Если это так, то вы будете вынуждены получить доступ к ContentPlaceHolder программно аналогично тому, что изображает Драгоценный Рой (хотя я не уверен, что его пример на 100% подходит для сценария, который вы описали).

2 голосов
/ 13 июля 2011

Проще здесь относительный термин. Нет более простого способа справиться с этим в отношении связывания главных страниц и их заполнителей, но его можно установить из кода. См. этот вопрос для справки. Roadie57 объясняет это лучше, чем я. Не уверен, что вы используете VB, но если нет, вы можете сделать это так:

ContentPlaceHolder mpContentPlaceHolder = new ContentPlaceHolder();
TextBox mpTextBox = new TextBox();
mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl("PlaceHolderA2");
if (mpContentPlaceHolder != null)
{
    ...place content in mpContentPlaceHolder
}
0 голосов
/ 13 июля 2011

Это звучит немного сложно ... поскольку у вас есть общие части между страницами, вы можете подумать об использовании для этого «пользовательских элементов управления».Вы можете разместить пользовательский элемент управления в любом месте на странице, которую хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...