ActionExecutingContext.ActionParameters RedirectToAction MVC 5 - T4MVC 上为 NULL

ActionExecutingContext.ActionParameters NULL on RedirectToAction MVC 5 - T4MVC

我有这样的重定向:

return RedirectToAction(MVC.Area.Controller.Index(institutionId));

这将重定向到一个继承自另一个控制器的控制器,该控制器具有如下定义的操作过滤器:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var institutionId = filterContext.ActionParameters["institutionId"];

    var institution = InstitutionRepository.GetById((int)institutionId);

    ...other code
}

ActionExecutingContext.ActionParameters 包含 institutionId 但该值始终为 NULL。我也尝试过重定向到路由,但给出了相同的输出。令我困扰的是,当我查看路线时,institutionId 似乎是通过查询参数传递的(Area/Controller?institutionId=17 而不是 Area/Controller/17)

MVC 代表 T4MVC,它是用于避免在重定向中硬编码字符串的框架。

如果有人在某个时候可能会遇到它,那实际上是非常棘手的。似乎在某些情况下 T4MVC 混淆了视图和解释:

return RedirectToAction(MVC.Area.Controller.Index(institutionId));

作为

return RedirectToAction(MVC.Area.OtherController.Index(institutionId));

查看 ActionParameters,该集合在 routeData 中同时包含 Controller 和 OtherController,因此它似乎只是通过视图名称(索引)查找了 Controller 名称,找到了属于这两个 Controller 的两个实例并生成了损坏的 MVC重定向字符串。更改视图名称后,ActionParameters 开始正确解析。