ASP.NET MVC не может найти маршрут программно
-
07-07-2019 - |
Вопрос
У меня есть следующий маршрут, зарегистрированный в моем global.asax.
routes.MapRoute(
"Home", // Unique name
"", // Root url
new { controller = "Home", action = "Index",
tag = string.Empty, page = 1 }
);
кьюл.когда я запускаю сайт, он правильно выбирает этот маршрут.
Теперь, когда я пытаюсь программно выполнить следующее, он возвращает NULL.
var pageLinkValueDictionary =
new RouteValueDictionar(linkWithoutPageValuesDictionary)
{{"page", 2}};
VirtualPathData virtualPathData =
RouteTable.Routes.GetVirtualPath(viewContext, "Home"
pageLinkValueDictionary);
// NOTE: pageLinkValueDictionary ==
// Key: Action, Value: Index; Key: page, Value: 2
Почему это должно было происходить?
У меня сложилось впечатление, что он найдет домашний маршрут, но добавит любые значения, не найденные в качестве элементов строки запроса?
Обновить
Все еще не везет с этим.Кроме того, используя MVC RC ( MVC RC RC ), Теперь мне нужно изменить viewContext на veiwContext.RequestContext ..который компилируется, но я все еще получаю нулевой результат.
Обновление 2
Когда у меня есть маршрут без page=1
элемент по умолчанию, маршрут НАЙДЕН.например.
routes.MapRoute(
"Home",
"",
new { controller = "Post", action = "Index", tags = string.Empty }
);
..и RouteTable.Routes.GetVirtualPath
возвращает VirtualPathData
пример.Когда я добавляю page=1
(значение по умолчанию) обратно, в VirtualPathData
возвращаемый экземпляр равен null?
Решение
Ну, причина, по которой он возвращает null, заключается в том, что нет маршрута с данными маршрута "страница".
Не могли бы вы немного подробнее рассказать о том, чего вы пытаетесь достичь?Если вы хотите перенаправить на страницу с URL /page/2 или / ?page=2 , то вам следует использовать RedirectToRoute или RedirectToAction:
return RedirectToRoute("IndexDefault", new {page = "2"});
Другие советы
Я думаю, что ваш маршрут должен быть таким:
route.MapRoute("theRoute", "{controller}/{action}/{tag}/{page}",
new { controller="Post", action="Index", tag="", page=1 });
или (в зависимости от того, как должен выглядеть полный URL-адрес)...
route.MapRoute("theRoute", "/{tag}/{page}",
new { controller="Post", action="Index", tag="", page=1 });
Это все равно будет соответствовать запросу на http://mysite.com/ и перейдите к значениям маршрута по умолчанию, определенным выше.Но теперь, когда вы укажете тег или страницу, вы получите нужный URL-адрес.
Тебе стоит проверить Маршрутный тестер Фила: