Вот лучшая статья об этом на MSDN . Прокрутите вниз до События жизненного цикла.
Если я правильно понимаю ваши вопросы, все, что вы спрашиваете в a, b и c, происходит во время Pre_Init. Событие Init срабатывает после инициализации всех элементов управления во время Pre_Init. Итак, во время инициализации вы теперь можете читать или инициализировать свойства этих элементов управления.
Обратите внимание, что вы все еще "инициализируете" свойство элемента управления во время инициализации.
Пример ...
<asp:Label ID="Label1" runat="server" CssClass="someclass"></asp:Label>
Init:
Label1.CssClass = "someotherclass";
Поправь меня, если я не прав, ребята ...
Я полагаю, что Label1 инициализируется с CssClass, установленным на «someclass» во время Pre_Init, а затем CelClass класса Label1 повторно инициализируется (первоначальное значение изменяется) на «someotherclass». Поэтому, когда страница загружена, значением класса будет «someotherclass».
И попытка получить доступ к Label1.CssClass в блоке Pre_Init не будет работать, так как Label1 еще не завершил инициализацию. У вас есть доступ к управляющим свойствам из Init.
Этот порядок инициализации не зависит от того, есть ли у вас MasterPage или нет. Рассматривайте MasterPage как еще один элемент управления. Я считаю, что все элементы управления внутри MasterPage также инициализируются во время Pre_Init.
Надеюсь, это понятно.