Вложенные мастер-страницы изменяются программно - PullRequest
1 голос
/ 20 января 2011

У меня есть СТРАНИЦА с такой структурой:

PAGE = MASTER PAGE A + nested MASTER PAGE B of A

ОСНОВНАЯ СТРАНИЦА A:

-----------
Header
-----------
BODY
-----------
Footer
-----------

ОСНОВНАЯ СТРАНИЦА B:

BODY-------------------------------
          |         |             |  
ColumLeft | Content | ColumRight  |
          |         |             |
-----------------------------------

Одна из функций, которую мне нужно разработать, - это возможность программно изменять вложенную MASTER PAGE.Например, изменение MASTER PAGE B на C (содержащее другую компоновку, например, всего 2 столбца) с сохранением централизованного колонтитула.

В данный момент на PAGE я использую этот код для выбора другого MP, но я не могуделать это, потому что, кажется, при выборе новой вложенной страницы asp.net теряет ссылку на главную MASTER PAGE A.

void Page_PreInit(Object sender, EventArgs e)
{
    this.MasterPageFile = "~/NewMaster.master";
}

Вопросы:

  • Есть идеи, как ее решить?
  • Было бы лучше иметь только мастер-страницу (1 уровень) и включать верхний и нижний колонтитулы с другой техникой?Если да, что бы вы мне предложили?

Ответы [ 2 ]

0 голосов
/ 20 января 2011

Чтобы программно изменить MasterPage, вы должны указать его тип сразу после ссылки на страницу регистрации на странице xml / html.

<%@ Page Language="C#" 
    MasterPageFile="~/MasterPage.master" 
    AutoEventWireup="false" 
    CodeFile="MyCodeFile.aspx.cs" 
    Inherits="MyCodeFile"
    title="Untitled Page" %>
<%@ MasterType 
    virtualpath="~/MasterPage.master" 
%>

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

0 голосов
/ 20 января 2011

В этом случае я бы не использовал вложенные мастер-страницы, а только одну мастер-страницу. Для столбцов я бы использовал RenderPartial или RenderAction. Это не СУХОЙ, как вы бы хотели, потому что вам нужно добавлять RenderPartial ("LeftColumn") в каждом представлении, поэтому я понимаю вашу проблему, но я так и делаю.

Примечание: RenderAction доступен в MVC. Для статьи об этом см. Например: http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

...