Html.RenderAction приводит к тому, что "маршрут в таблице маршрутов не соответствует указанным значениям"

Я пытаюсь использовать Html.RenderAction в ASP.NET MVC 2 RC2 следующим образом:

В элементе управления меню:

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

И в моем представлении Индекса (для действия индекса главного контроллера):

 <% Html.RenderAction("ContentPageMenus", "ContentPageMenu");%>

Но я всегда получаю это сообщение об ошибке: Ни один маршрут в таблице маршрута не соответствует указанным значениям.

Ответ 1

MVC Фьючерсы, используемые для предоставления действий, которые не имели маршрутов. Это изменилось в ASP.NET MVC2.

Если вы хотите, чтобы RenderAction работал, и вы хотите скрыть свой маршрут, чтобы он не был общедоступным.

  • Добавьте маршрут для своего действия в globals.asax.cs.
  • Украсьте свое действие с помощью атрибута [ChildActionOnly].

Ответ 2

Добавление третьего параметра вроде этого было решением для меня (в бритве):

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

Ответ 3

Каково ваше имя контроллера? По умолчанию для ваших маршрутов происходит следующее.

Имя контроллера, указанное в вашем методе RenderAction, выполняется с помощью "Контроллера", добавленного к этому имени.

Вызывается метод Action в этом контроллере и возвращается вид.

Итак, посмотрев на ваш код, произойдет следующее:

  • У вас должен быть контроллер под названием "ContentPageMenuController"
  • У вас должно быть действие под названием "ContentPageMenus", которое у вас есть
  • У вас должно быть представление под названием ContentPageMenus()

Предполагается, что вы не изменили маршрутизацию по умолчанию и не добавили новые, которые повлияют на вашу маршрутизацию

Ответ 4

У меня была такая же ошибка. Это было вызвано изменением маршрута по умолчанию; очевидно, он явно ищет имя маршрута "По умолчанию".

Ответ 5

Зарегистрировали ли вы дополнительные маршруты для своего приложения?

Ответ 6

Почему вы не пытаетесь использовать сильный типизированный метод?

Попробуйте следующее:

<% Html.RenderAction<ContentPageMenusController>(x => x.ContentPageMenus()); %>

Вы должны заполнить точное имя класса.

Ответ 7

У меня была эта проблема раньше, именно там маршрут не включал контроллер.

            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 }
        );