[英]Unable to Redirect No route in the routing table matches the supplied values. in MVC 5
[英]Html.RenderAction causes “No route in the route table matches the supplied values”
我試圖以這種方式在ASP.NET MVC 2 RC2中使用Html.RenderAction:
在菜單控制器中:
[ChildActionOnly]
public ActionResult ContentPageMenus()
{
var menus = _contentPageMenuRepository.GetAll().WithCulture(CurrentCulture);
return PartialView(menus);
}
在我的索引視圖中(對於Home控制器的Index操作):
<% Html.RenderAction("ContentPageMenus", "ContentPageMenu");%>
但我總是收到此錯誤消息:路由表中的路由與提供的值不匹配。
像這樣添加第三個參數是我的解決方案(在剃刀中):
@{Html.RenderAction("ActionName", "ControllerName", new { area = string.Empty });}
MVC Futures曾經允許渲染沒有路線的動作。 這在ASP.NET MVC2中已經發生了變化。
如果您希望RenderAction正常工作,並希望隱藏您的路線,以便無法公開訪問。
globals.asax.cs
為您的操作添加路由。 [ChildActionOnly]
屬性裝飾您的動作。 你的控制器名稱是什么? 默認情況下,您的路線會發生以下情況。
搜索RenderAction方法中指定的Controller名稱,並在該名稱后附加“Controller”。
調用該Controller中的Action方法並返回View。
因此,通過查看您的代碼,將發生以下情況
這假設您沒有更改默認路由,也沒有添加會影響路由的新路由
我有同樣的錯誤。 這是由改變默認路線引起的; 顯然它明確地搜索路由名稱“Default”。
您是否為您的申請注冊了其他路線?
為什么不嘗試使用強類型方法?
嘗試這個:
<% Html.RenderAction<ContentPageMenusController>(x => x.ContentPageMenus()); %>
你必須填寫該類的確切名稱。
我以前遇到過這個問題,路由沒有包含控制器。
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 }
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.