Понимание ASP. NET MVC Жизненный цикл: почему модель недоступна в ActionFilter? - PullRequest
0 голосов
/ 09 мая 2020

Я создал следующий Custom ActionFilter, когда я пытаюсь получить доступ к Model в следующем коде, он имеет значение null:

public class CustomPermissionCheckAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        OrganisationBaseController orgBaseController = context.Controller as Controller;
        var vm = ((Controller)context.Controller).ViewData.Model as MyViewModel; // null

        // check if current user has permission to vm.OrganisationId

        base.OnActionExecuting(context);
    }
}

Я пытаюсь понять, почему Model имеет значение null ? Согласно ASP. NET MVC Lifecycle , ActionFilters выполняются после связывания модели, поэтому я не уверен, почему модель недоступна?

enter image description here


Вот как я регистрирую указанный выше фильтр действий:

[HttpPost]
[CustomPermissionCheck]
public ActionResult UpdateBranch(MyViewModel myViewModel)
{
    if (ModelState.IsValid)
    {
        // so something 
    }
    return View();
}

1 Ответ

1 голос
/ 11 мая 2020

Можно попробовать это для доступа к модели запроса:

MyViewModel vm = context.ActionParameters.Values.OfType<MyViewModel>().SingleOrDefault();

Как получить текущую модель в фильтре действий

...