Вопрос

У меня есть следующий маршрут, зарегистрированный в моем 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-адрес.

Тебе стоит проверить Маршрутный тестер Фила:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top