簡體   English   中英

Html.RenderAction導致“路由表中沒有路由匹配提供的值”

[英]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正常工作,並希望隱藏您的路線,以便無法公開訪問。

  1. globals.asax.cs為您的操作添加路由。
  2. 使用[ChildActionOnly]屬性裝飾您的動作。

你的控制器名稱是什么? 默認情況下,您的路線會發生以下情況。

搜索RenderAction方法中指定的Controller名稱,並在該名稱后附加“Controller”。

調用該Controller中的Action方法並返回View。

因此,通過查看您的代碼,將發生以下情況

  1. 你應該有一個名為“ContentPageMenuController”的控制器
  2. 您應該擁有一個名為“ContentPageMenus”的Action
  3. 你應該有一個名為ContentPageMenus()的視圖

這假設您沒有更改默認路由,也沒有添加會影響路由的新路由

我有同樣的錯誤。 這是由改變默認路線引起的; 顯然它明確地搜索路由名稱“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM