динамическое изменение главной страницы. С главной страницы?


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

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 2

1 ответ:

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

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