динамически изменить мастер-страницу .. ОТ мастер-страницы? - PullRequest
2 голосов
/ 21 июня 2011

У меня есть следующий фрагмент кода:

public abstract class BasePage : Page
{
    protected void Page_PreInit(object sender, EventArgs e)
    {
        if (IsPostBack)
            return;

        var section = ConfigurationManager.GetSection("UrlRewriter/PlainRules");

        if (section == null)
            SetMaster("~/App_Shared/Master/BaseRegular.Master");
        else
            SetMaster("~/App_Shared/Master/BaseRewritable.Master");
    }

    protected void SetMaster(string value)
    {
        MasterPage master = Master;

        while (master != null)
        {
            if (master is SharedMaster)
            {
                master.MasterPageFile = value;
                break;
            }

            master = master.Master;
        }
    }
}

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

Page_PreInit никогда не срабатывает, если размещается на главной странице, так как я могу это сделать?

1 Ответ

1 голос
/ 21 июня 2011

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

Что касается размещения логики на главной странице, это будет невозможно - поскольку после того, как главная страница будет связана со страницей и загружено дерево управления, вы не сможете изменить главную страницу. Pre_init не запускается для главной страницы, потому что главная страница не загружается до этой точки и поэтому однажды может изменить главную страницу, связанную с этой страницей. Затем загружается главная страница и создается составное дерево управления, после чего вы будете получать события главной страницы.

...