Asp.net MVC 5 MapRoute pour de multiples voies
J'ai 3 itinéraires en RouteConfig:
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" }
);
et c'est mon contrôleur d'action de la réception de paramètres:
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)
{
//...
}
quand j'utilise en vue d'un lien avec @Url.RouteUrl("ByBrandId", new {brandId = 5})
, - je obtenir dans l'Action d'un paramètre "nom de catégorie"="marque" et de brandId=0 au lieu de seulement brandId=5...
Quand je l'appelle "http://localhost:3453/catalog/brand/5"
avec "ByBrandId" routeurl je veux obtenir brandId=5 dans actioncontroller..., l'équivalent de "http://localhost:3453/catalog/Catalog?brandId=1"
grâce
Vous devez vous connecter pour publier un commentaire.
Votre routage est mal configuré. Si vous passer l'URL
/Catalog/brand/something
il toujours correspondre à laByGroupName
route au lieu de laByBrandId
route.Tout d'abord, vous devez corriger l'ordre. Mais aussi, les 2 premières routes sont exactement les mêmes, sauf pour l'option de nom de groupe, de sorte que vous pouvez simplifier à:
Maintenant, lorsque vous utilisez
@Url.RouteUrl("ByBrandId", new {brandId = 5})
il devrait vous donner de la sortie attendue de/catalog/brand/5
.Voir Pourquoi la carte des itinéraires spéciaux d'abord avant de communes des routes dans asp.net mvc pour une explication complète.