Правильный маршрут, используемый только URL, неправильны. MVC 3 маршрутизация. - PullRequest
3 голосов
/ 30 ноября 2011

Я создаю коммерческий сайт, и я столкнулся с проблемой нескольких категорий внутри категорий.Мои ссылки ActionLink идут в нужную категорию, но иногда они помещают избыточную строку запроса в конце.Это не всегда происходит, только когда в подкатегории (я понимаю, что actionlink пытается вытащить значения маршрута из любой точки, но смотри ниже)

Я немного ошарашил его, чтобы убедиться, что яничего не пропуская, но у меня те же проблемы:

routes.MapRoute(
    "Store1",
    "store/{tier1Category}/{tier2Category}/{categoryId}",
    new { controller = "Store", action = "Index"},
    new { categoryId = @"\d+" }
);

routes.MapRoute(
    "Store",
    "store/{tier1Category}/{categoryId}",
    new { controller = "Store", action = "Index"},
    new { categoryId = @"\d+" }
);

Я создал расширение HtmlHelper для ссылок на категории:

public static MvcHtmlString CategoryLink(this HtmlHelper helper, Category category)
{
    .........

    return helper.ActionLink(category.Name, "Index", "Store", new { tier1Category = tier1Category, tier2Category = tier2Category, categoryId = category.CategoryID }, null);
}

(снипп-код просто получает tier1Category &tier2Category)

Итак, на домашней странице есть меню навигации, например:

http://localhost/store/tshirt/1

Теперь, если бы мне нужно было перейти в подкатегориюэта категория (http://localhost/store/tshirt/men/2) та же ссылка в навигации будет:

http://localhost/store/tshirt/1?tier2category=men

Теперь, что делает это более запутанным, так это то, что когда я отлаживаю метод расширения выше, в этом сценарии,возвращаемая ссылка действия - "http://localhost/store/tshirt/1", т. е. правильная! Так что, похоже, что-то происходит с MvcHtmlString, которая возвращается из расширения к тому времени, когда он выплевывает html. Также следует отметить, что ссылка все еще идет наTОн указал правильное местоположение.

Любая помощь была бы великолепна, потому что я как бы тяну свои волосы сюда ...

1 Ответ

0 голосов
/ 30 ноября 2011

Я создал проект со вставленным точным кодом.Конечно, я заменил точки в помощнике кодом для заполнения отсутствующих переменных.Сгенерированные URL вышли именно так, как вы хотите, а не со строкой запросаИтак, на этой ноте, кто знает.

Что касается рассматриваемой проблемы, мне кажется немного странным, что вы вообще включаете categoryId в URL.Разве это не то, что должны обрабатывать строки категорий?Если это так, вы можете немного усложнить маршрут с одним магазином:

routes.MapRoute(
    "Store",
    "store/{tier1Category}/{tier2Category}",
    new { controller = "Store", action = "Index", tier2Category = UrlParameter.Optional }
);

Теперь вы не удваиваете информацию в своем URL и можете использовать число в конце для любой подкачкиили что-то еще полезное.И я бы сказал, что URL выглядят чище:

http://localhost/store/tshirt
http://localhost/store/tshirt/mens

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...