Html.RenderAction导致"路由表中没有路由匹配提供的值"

Mah*_*deh 15 .net asp.net-mvc

我试图以这种方式在ASP.NET MVC 2 RC2中使用Html.RenderAction:

在菜单控制器中:

[ChildActionOnly]
public ActionResult ContentPageMenus()
{
     var menus = _contentPageMenuRepository.GetAll().WithCulture(CurrentCulture);
     return PartialView(menus);
}
Run Code Online (Sandbox Code Playgroud)

在我的索引视图中(对于Home控制器的Index操作):

 <% Html.RenderAction("ContentPageMenus", "ContentPageMenu");%>
Run Code Online (Sandbox Code Playgroud)

但我总是收到此错误消息:路由表中的路由与提供的值不匹配.

Mem*_*sen 12

像这样添加第三个参数是我的解决方案(在剃刀中):

@{Html.RenderAction("ActionName", "ControllerName", new { area = string.Empty });}


Sam*_*ron 11

MVC Futures曾经允许渲染没有路线的动作.这在ASP.NET MVC2中已经发生了变化.

如果您希望RenderAction正常工作,并希望隐藏您的路线,以便无法公开访问.

  1. 为您的行动添加路线globals.asax.cs.
  2. 使用[ChildActionOnly]属性装饰您的动作.


Jor*_*rda 6

我有同样的错误。这是由于更改默认路由引起的。显然,它显式搜索路由名称“默认”。


Pie*_*uys 5

你的控制器名称是什么?默认情况下,您的路线会发生以下情况.

搜索RenderAction方法中指定的Controller名称,并在该名称后附加"Controller".

调用该Controller中的Action方法并返回View.

因此,通过查看您的代码,将发生以下情况

  1. 你应该有一个名为"ContentPageMenuController"的控制器
  2. 您应该拥有一个名为"ContentPageMenus"的Action
  3. 你应该有一个名为ContentPageMenus()的视图

这假设您没有更改默认路由,也没有添加会影响路由的新路由

  • 我发现了这个问题.我总是删除{controller}/{action} route并使用小写的REST(如URL)自定义所有路由.但对于Html.RenderAction,有必要有这样的一般路线.我添加了到路线列表末尾的一般路线并且它有效. (9认同)

Gop*_*her 0

您是否为您的申请注册了任何其他路线?