ASP.NET MVC не может найти маршрут программно - PullRequest
2 голосов
/ 07 ноября 2008

У меня есть следующий маршрут, зарегистрированный в моем global.asax.

routes.MapRoute(
    "Home", // Unique name
    "", // Root url
    new { controller = "Home", action = "Index", 
        tag = string.Empty, page = 1 }
);

Kewl. когда я запускаю сайт, он правильно подхватывает этот маршрут.

Теперь, когда я пытаюсь программно сделать следующее, он возвращает 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

Почему это происходит?

У меня сложилось впечатление, что он найдет маршрут Home, но добавит значения, не найденные в качестве элементов строки запроса?

Обновление

Все еще не повезло с этим. Также, используя MVC 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 возвращает ноль?

Ответы [ 3 ]

1 голос
/ 07 ноября 2008

Я думаю, что ваш маршрут должен быть таким:

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.

1 голос
/ 07 ноября 2008

Ну, причина, по которой он возвращает null, заключается в том, что нет маршрута с данными маршрута "страницы".

Не могли бы вы немного рассказать о том, чего вы пытаетесь достичь? Если вы хотите перенаправить на страницу с URL / page / 2 или /? Page = 2, вам следует использовать RedirectToRoute или RedirectToAction:

return RedirectToRoute("IndexDefault", new {page = "2"}); 
0 голосов
/ 08 ноября 2008

Вы должны проверить Route Tester Фила:

Отладчик маршрутизации ASP.NET

...