Как установить данные модели в ActionFilterAttribute при использовании типизированного представления - PullRequest
7 голосов
/ 08 июня 2009

Я использую строго типизированные представления, где все ViewModel наследуют класс BaseViewModel.

В ActionFilter, который украшает все контроллеры, я хочу использовать модель.

Сейчас я могу получить к нему доступ только так:

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"];
        base.OnActionExecuting(filterContext);
   }

Проблема в том, что я должен знать ключ "viewModel". Ключ - viewModel, потому что в моем контроллере я использовал:

возврат Просмотр ( "MyView", ViewModel)

Есть ли более безопасный способ доступа к модели?

Ответы [ 3 ]

14 голосов
/ 09 июня 2009

OnActionExecuting работает непосредственно перед тем, как ваше действие будет выполнено - таким образом, для модели задано нулевое значение. Вы можете получить доступ к своим ViewData (или ViewData.Model) в OnActionExecuted:

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var model = filterContext.Controller.ViewData.Model as YourModel;

    ...
}

Надеюсь, это поможет

4 голосов
/ 16 августа 2011

Вы можете использовать это также в OnActionExecuting:

BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel;

Надеюсь, это поможет

1 голос
/ 27 октября 2015

Это старый вопрос, но теперь я могу получить доступ к модели во время OnActionExecuting:

var model = filterContext.ActionParameters["model"] as CustomerModel;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...