【问题标题】:Rendering action from base controller, getting route not defined error从基本控制器渲染动作,获取未定义路由错误
【发布时间】:2014-11-22 14:49:39
【问题描述】:

我有一个基本控制器,所有其他控制器都继承自,基本控制器内部是 2ActionResult,这对我网站上的每个页面都是通用的。当我尝试使用 Html.RenderAction 从视图中调用这些操作中的任何一个时,我得到了错误

路由表中没有路由与提供的值匹配。

我检查了Action 设置为public 并且名称拼写正确。我做错了什么?

来电:@{ Html.RenderAction("SectionNavigation"); }

行动:

[Route("SectionNavigation")] public ActionResult SectionNavigation()

如您所见,我也在使用属性路由。我还尝试更新调用以将 Base 指定为控制器,但这并没有改变任何东西。

【问题讨论】:

  • RenderAction的第一个参数是动作名,不是路由名。如果您正在渲染使用控制器生成的视图,而不是定义SectionNavigation 操作的控制器,您还必须指定控制器名称:@Html.RenderAction("SecondNavigation", "YourControllerName")。如果您使用的是区域,则还必须包含区域名称:@Html.RenderAction("SecondNavigation", "YourControllerName", new { Area = "MyAreaName" })。
  • @haim770 我确实尝试指定控制器名称,但得到了同样的错误。正如您从我的帖子中看到的那样,路线和操作的名称是相同的,所以调用应该有效。我正在使用区域,但这两个控制器不在一个区域中,但我会尝试指定 area="" 看看会发生什么。
  • @haim770 添加区域解决了这个问题,如果你想把它作为答案我会这样标记。
  • 我添加了答案。谢谢。

标签: asp.net-mvc asp.net-mvc-5 attributerouting


【解决方案1】:

RenderAction 方法的第一个参数是 action 名称,而不是路由名称。

如果您正在渲染使用非定义 SectionNavigation 操作的控制器生成的视图,您还必须指定控制器名称:

@Html.RenderAction("SecondNavigation", "YourControllerName").

如果您使用的是区域,则还必须包含区域名称:

@Html.RenderAction("SecondNavigation", "YourControllerName", new { Area = "MyAreaName" }).

见Documentation

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2021-02-13
    相关资源
    最近更新 更多