1

у меня есть 3 маршрута в RouteConfig:Asp.net MVC 5 MapRoute для нескольких маршрутов

routes.MapRoute(
    name: "ByGroupName", 
    url: "catalog/{categoryname}/{groupname}", 
    defaults: new { controller = "Catalog", action = "Catalog" } 
); 
routes.MapRoute(
    name: "ByCatName", 
    url: "catalog/{categoryname}", 
    defaults: new { controller = "Catalog", action = "Catalog" } 
); 
routes.MapRoute(
    name: "ByBrandId", 
    url: "catalog/brand/{brandId}", 
    defaults: new { controller = "Catalog", action = "Catalog" } 
); 

и это мой контроллер действия, получающие параметры:

public ActionResult Catalog(
    string categoryName = null, 
    string groupName = null, 
    int pageNumber = 1, 
    int orderBy = 5, 
    int pageSize = 20, 
    int brandId = 0, 
    bool bundle = false, 
    bool outlet = false, 
    string query_r = null) 
{ 
// ... 
} 

, когда я использую в виду связь с @Url.RouteUrl("ByBrandId", new {brandId = 5}), я получаю в действии параметр "CategoryName" = "бренд" и brandId = 0 вместо только brandId = 5 ...

Когда я звоню "http://localhost:3453/catalog/brand/5" с "ByBrandId" routeurl Я хочу чтобы получить brandId = 5 в ActionController ..., эквивалент "http://localhost:3453/catalog/Catalog?brandId=1"

благодаря

ответ

1

Ваша маршрутизация является неправильно. Если вы пройдете URL-адрес /Catalog/brand/something, он будет всегда соответствует маршруту ByGroupName вместо предполагаемого маршрута ByBrandId.

Прежде всего, вы должны исправить заказ. Но также, первые 2 маршрутов точно так же для опционального имени группы, за исключением, так что вы можете упростить:

routes.MapRoute(
    name: "ByBrandId", 
    url: "catalog/brand/{brandId}", 
    defaults: new { controller = "Catalog", action = "Catalog" } 
); 
routes.MapRoute(
    name: "ByGroupName", 
    url: "catalog/{categoryname}/{groupname}", 
    defaults: new { controller = "Catalog", action = "Catalog", groupname = UrlParameter.Optional } 
); 

Теперь, когда вы используете @Url.RouteUrl("ByBrandId", new {brandId = 5}) это должно дать вам ожидаемый результат /catalog/brand/5.

См. Why map special routes first before common routes in asp.net mvc для полного объяснения.

 Смежные вопросы

  • Нет связанных вопросов^_^