Создайте модель базового вида, но не можете подключиться к ней в 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
            }
}

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

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

2 ответа

Решение

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

Вызывается до вызова метода действия.

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

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

Ваш OnActionExecuting hook - ДО того, как вызывается метод действия... поэтому вы видите модель данных представления как нулевую. Попробуйте использовать OnActionExecuted вместо.

Затем вы можете проверить, принадлежит ли модель этому базовому типу, используя ключевое слово is сюда:

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

    var base = ViewData.Model as BaseModel;
    // set common properties
}
Другие вопросы по тегам