Diego, System.Web.Mvc.WebViewPage
- правильный базовый тип (и у вас должен быть другой класс, наследующий от System.Web.Mvc.WebViewPage<TModel>
, если вы хотите строго типизированные представления).Вы должны пометить свой собственный класс как abstract
, чтобы вам не пришлось реализовывать метод Execute.
Обновление: Чтобы настроить все ваши представления для использования вашего пользовательского базового класса, изучитефайл ~\Views\Web.config
.Внутри него есть специфичный для Razor раздел, где вы можете использовать атрибут pageBaseType
для настройки вашего пользовательского типа.
Что касается свойства Context, то оно должно быть полностью инициализировано после выполнения представления.Однако он может быть недоступен, если вы попытаетесь получить к нему доступ слишком рано (например, из конструктора классов).Когда вы пытаетесь получить к нему доступ?
Метод Execute - это то, что предоставляется компилятором Razor при компиляции вашего представления.Например, учитывая следующий файл представления
Hello @Name!
Компилятор Razor за кулисами сгенерирует следующий класс (это упрощение, поэтому детали могут быть отключены, но это должно передать точку)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
public void Execute() {
Write("Hello ");
Write(Name);
Write("!");
}
}
Затем платформа вызывает метод Execute для вашего класса представления, и ваше представление выполняется.