1

我有一个重定向,例如:

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 包含机构 ID,但值始终为 NULL。我也尝试过重定向到路由,但这给出了相同的输出。困扰我的是,当我查看路线时,机构Id 似乎是通过查询参数传递的(Area/Controller?institutionId=17 而不是 Area/Controller/17)

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

4

1 回答 1

0

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

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

作为

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

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

于 2018-11-30T12:49:31.157 回答