我创建了以下自定义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之后执行的,所以我不确定为什么模型不可用?
这是我注册上述动作过滤器的方式:
[HttpPost]
[CustomPermissionCheck]
public ActionResult UpdateBranch(MyViewModel myViewModel)
{
if (ModelState.IsValid)
{
// so something
}
return View();
}
可以尝试访问请求模型:
MyViewModel vm = context.ActionParameters.Values.OfType<MyViewModel>().SingleOrDefault();