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