【发布时间】: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