Ответ 1
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 в вашем классе вида и ваше представление будет выполнено.