asp.net-mvc - 了解 ASP.NET MVC 生命周期:为什么 Model 在 ActionFilter 中不可用?
问题描述
我创建了以下自定义操作过滤器,当我尝试Model
在以下代码中访问时,它为空:
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 之后执行的,所以我不确定为什么 Model 不可用?
这就是我注册上述动作过滤器的方式:
[HttpPost]
[CustomPermissionCheck]
public ActionResult UpdateBranch(MyViewModel myViewModel)
{
if (ModelState.IsValid)
{
// so something
}
return View();
}
解决方案
可以试试这个来访问请求模型:
MyViewModel vm = context.ActionParameters.Values.OfType<MyViewModel>().SingleOrDefault();
推荐阅读
- c# - 内存性能计数器 C#
- java - 使用 List 作为参数时出现不兼容类型错误
- python - 谷歌课堂活动不显示在谷歌日历 api 上
- javascript - 工具栏错误放置的导航项反应
- json - 在 lua 中解码 JSON 的问题
- powerapps - 过滤 Powerapps 列表
- spring-cloud-gateway - Spring Cloud Gateway:在路径中使用查询参数值?
- javascript - 如何修复 nginx 上的 http 414 Request-URI Too Large 错误?
- python - pandas 第二列中值的条件计数?
- java - 批量插入需要非常长的时间