2012-01-23 4 views
0

Я пытаюсь переопределить функцию Page_PreInit внутри моего класса _Default, который наследует от Page. Однако, когда я пытаюсь скомпилировать я получаю следующее сообщение об ошибке:Ошибка компилятора при переопределении Page_PreInit

'_Default.Page_PreInit(object, System.EventArgs)': no suitable method found to override

Вот мой код:

public partial class _Default : Page 
{ 
    protected override void Page_PreInit(object sender, EventArgs e) 
    { 
     // Todo: 
     // The _Default class overrides the Page_PreInit method and sets the value 
     // of the MasterPageFile property to the current value in the 
     // selectedLayout session variable. 

     MasterPageFile = Master.Session["selectedLayout"]; 
    } 

    ... 
} 

ответ

5

Page класса объявляет публичное мероприятие под названием PreInit и защищенный виртуальный метод с именем OnPreInit (который просто вызывает событие PreInit). Таким образом, у вас есть два варианта.

Вариант 1 (рекомендуется): Override OnPreInit:

protected override void OnPreInit(EventArgs e) 
{ 
    // Set the master page here... 

    base.OnPreInit(e); 
} 

base.OnPreInit(e) вызова так, что страница поднимает PreInit событие, как обычно.

Вариант 2: Создайте метод с именем Page_PreInit. ASP.NET автоматически привяжет этот метод к событию PreInit, если вы не установили AutoEventWireup в False в директиве @Page или в Web.config.

private void Page_PreInit(object sender, EventArgs e) 
{ 
    // Set the master page here... 
} 

Если вы выберете этот вариант, не называйте base.OnPreInit, иначе вы будете в конечном итоге с бесконечной рекурсии.

+0

О, хорошо, что имеет смысл, спасибо! все еще ошибка «Ссылка на объект не установлена ​​в экземпляр объекта». здесь: MasterPageFile = Master.Session ["selectedLayout"]; – shenn

+0

Попробуйте 'this.Session' вместо' Master.Session'. –

+0

this.session: не может применяться [] к типу выражения «группа методов» – shenn

Смежные вопросы