2013-04-23 3 views
2

Я создаю базовую модель, которую наследуют другие другие модели с типичным типизированным видом.Создайте модель базового представления, но не можете ее зацепить в OnActionExecuting

BaseController:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
      var baseViewModel = ViewData.Model as BaseViewModel; 
      if (baseViewModel != null) 
      { 
       // set common properties that I want to use in all views 
      } 
} 

Теперь, когда я поставил точку останова на cluase если, кажется, baseViewModel всегда нуль.

Как установить базовый объект ViewData.Model в BaseViewModel?

ответ

4

OnActionExecuting еще слишком рано, чтобы посмотреть на модель.

Вызывается перед вызовом метода action.

Вы можете увидеть модель в OnActionExecuted.

2

ViewData предназначен для отправки модели с контроллера для просмотра.

Ваш крючок OnActionExecuting ПЕРЕД вызовом метода действия ... поэтому вы видите модель viewdata как null. Вместо этого попробуйте использовать OnActionExecuted.

Вы можете проверить, если модель этого базового типа с помощью ключевого слова is таким образом:

if(ViewData.Model != null && ViewData.Model is BaseModel){ 

    var base = ViewData.Model as BaseModel; 
    // set common properties 
}