我正试图以这种方式在ASP.NET MVC 2 RC2中使用Html.RenderAction:
在菜单控制器中:
[ChildActionOnly]
public ActionResult ContentPageMenus()
{
var menus = _contentPageMenuRepository.GetAll().WithCulture(CurrentCulture);
return PartialView(menus);
}
在我的索引视图中(对于Home控制器的索引操作):
<% Html.RenderAction("ContentPageMenus", "ContentPageMenu");%>
但我总是收到此错误消息: 路由表中的路由与提供的值不匹配。
答案 0 :(得分:11)
MVC Futures用于允许呈现没有路线的动作。这在ASP.NET MVC2中已经发生了变化。
如果您希望RenderAction工作,并希望隐藏您的路线,以便无法公开访问。
globals.asax.cs
。[ChildActionOnly]
属性装饰您的操作。答案 1 :(得分:11)
添加像这样的第三个参数是我的解决方案(在剃须刀中):
@{Html.RenderAction("ActionName", "ControllerName", new { area = string.Empty });}
答案 2 :(得分:5)
你的控制器名称是什么? 默认情况下,您的路线会发生以下情况。
搜索RenderAction方法中指定的Controller名称,并在该名称后附加“Controller”。
调用Controller中的Action方法并返回View。
因此,通过查看您的代码,将发生以下情况
这假设您没有更改默认路由并且没有添加会影响路由的新路由
答案 3 :(得分:4)
我有同样的错误。这是由改变默认路线引起的;显然它明确地搜索路线名称“默认”。
答案 4 :(得分:0)
您是否为申请注册了其他路线?
答案 5 :(得分:0)
为什么不尝试使用强类型方法?
试试这个:
<% Html.RenderAction<ContentPageMenusController>(x => x.ContentPageMenus()); %>
你必须填写班级的确切名称。
答案 6 :(得分:0)
之前我遇到过这个问题,路线并没有包含控制器。
context.MapRoute(
"Route_default",
"Stuff/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
我仍然希望能够在区域之后直接调用动作,所以我添加了以下路线。
context.MapRoute(
"Route_default",
"Search/{action}/{id}",
new { controller = "Search", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"Route_Controller",
"Stuff/{controller}/{action}/{id}",
new { controller = "Something", action = "Index", id = UrlParameter.Optional }
);