代码之家  ›  专栏  ›  技术社区  ›  qubits

重定向到操作MVC 5-T4MVC时actionExecutingContext.actionParameters为空

  •  0
  • qubits  · 技术社区  · 6 年前

    我的重定向方式如下:

    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
    }
    

    actionExecutionContext.actionParameters包含institionID,但值始终为空。我也尝试过重定向到route,但得到了相同的输出。令我困扰的是,当我查看路由时,机构ID似乎是通过查询参数(区域/控制器)传递的?机构ID=17而不是区域/管制员/17)

    MVC代表t4mvc,它是一个框架,用于避免在重定向中对字符串进行硬编码。

    1 回复  |  直到 6 年前
        1
  •  0
  •   qubits    6 年前

    如果有人在某个时刻可能遇到它,这实际上是相当棘手的。在某些情况下,t4mvc会混淆视图并解释:

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

    作为

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

    查看actionParameters,集合在routedata中同时包含controller和othercontroller,因此看起来它只是根据视图名称(index)查找控制器名称,找到两个属于两个控制器的实例,并生成一个中断的MVC重定向字符串。更改视图名称后,ActionParameters开始正确解析。