Что такое базовый класс Razor View в ASP.NET MVC3 - PullRequest
17 голосов
/ 19 октября 2010

Я пытаюсь, чтобы все мои представления наследовали от пользовательского класса, чтобы я мог добавить определенное поведение и значения ко всем страницам, но у меня есть некоторые проблемы.Я попытался создать подкласс System.Web.Mvc.WebViewPage, но я вынужден реализовать процедуру Execute, которая не знает, что она должна делать.Кроме того, если я пытаюсь получить доступ к переменной Context, я получаю нулевую ссылку (действительно странно).Это заставляет меня думать, что у меня неправильный базовый класс ....

Есть мысли?

1 Ответ

30 голосов
/ 19 октября 2010

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 для вашего класса представления, и ваше представление выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...