了解ASP.NET MVC生命周期:为什么模型在ActionFilter中不可用?

问题描述 投票:0回答:1

我创建了以下自定义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为空?根据ASP.NET MVC Lifecycle,ActionFilters是在Model Binder之后执行的,所以我不确定为什么模型不可用?

enter image description here


这是我注册上述动作过滤器的方式:

[HttpPost]
[CustomPermissionCheck]
public ActionResult UpdateBranch(MyViewModel myViewModel)
{
    if (ModelState.IsValid)
    {
        // so something 
    }
    return View();
}
asp.net-mvc model-binding action-filter
1个回答
1
投票

可以尝试访问请求模型:

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

How to get current model in action filter

© www.soinside.com 2019 - 2024. All rights reserved.