Я пытаюсь получить текущий маршрут в моем контроллере навигации, чтобы я мог запускать сравнения при заполнении данных меню навигации.
Мой объект ссылок выглядит следующим образом:
public class StreamNavLinks
{
public string Text { get; set; }
public RouteValueDictionary RouteValues { get; set; }
public bool IsSelected { get; set; }
}
На главной странице я пытаюсь передать текущий маршрут контроллеру навигации следующим образом:
<% Html.RenderAction(
"MenuOfStreamEntries", // action
"Nav", // controller
new { // parameters for action
currentStreamUrl = "Blog",
currentRoute = ViewContext.RouteData } // get route data to compare in controller
); %>
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как получитьлюбые данные из currentRoute
.Каков наилучший метод для получения значений или currentRoute
?
Я пробовал синтаксис, как это:
currentRoute.Values.routevaluename
и
currentRoute.Values[0]
Но яне могу заставить его работать.
Редактировать
Я также пытался поместить этот код в действие контроллера навигации:
var current = RouteData["streamUrl"];
и
var current = this.RouteData["streamUrl"];
Обе версии дают мне эту ошибку:
Ошибка 1 Не удается применить индексирование с помощью [] к выражению> типа 'System.Web.Routing.RouteData' C: \ pathtocontroller\ NavController.cs 25 27
Изменить 2
Также может быть полезно узнать значения маршрута, с которыми я пытаюсь сопоставить:
routes.MapRoute(null, "", // Only matches the empty URL (i.e. ~/)
new
{
controller = "Stream",
action = "Entry",
streamUrl = "Pages",
entryUrl = "HomePage"
}
);
routes.MapRoute(null, "{streamUrl}/{entryUrl}", // matches ~/Pages/HomePage
new { controller = "Stream", action = "Entry" }
);
Таким образом, в конечном итоге mydomain.com/blog/blogentry1 будет отображаться на тот же контроллер / действие, что и mydomain.com/pages/welcome.Я не ищу значение контроллера или значение действия, скорее, я ищу значение streamUrl и значение EntryUrl.