4 votes

ASP.NET MVC 3 Areas - Impossible de trouver une vue avec une route personnalisée

J'ai un itinéraire personnalisé dans une zone comme suit :

context.Routes.Add(
                "SearchIndex - By Location - USA",
                new CountryTypeSpecificRoute(
                    CountryType.UnitedStates,
                    "search/{locationType}-in-{query}",
                    new { controller = "Search", action = "Index", query = UrlParameter.Optional },
                    new { locationType = new UsaLocationSearchRouteConstraint() })
            );

Exemple d'URL :

/search/neighborhoods-in-new-york-city

Résout le problème de l'action. Mais il ne trouve pas la vue.

La vue 'Index' ou son maître n'a pas été trouvée ou ne prend en charge les emplacements recherchés. Les emplacements suivants ont été recherchés : ~/Views/Search/Index.cshtml ~/Views/Shared/Index.cshtml

La vue vit dans ~/Areas/Search/Views/Search/Index.cshtml

Pourquoi n'a-t-il pas regardé là ?

Si je le fais context.MapRoute au lieu de context.Routes.Add ça marche. Il semble donc que cela ait à voir avec le fait que j'utilise une route personnalisée ?

Des idées ?

5voto

RPM1984 Points 39648

Résolu grâce à cette réponse

J'ai mis en place mon itinéraire personnalisé IRouteWithArea (le prendre dans le ctor), et mettre à jour mon enregistrement en conséquence :

context.Routes.Add(
                "SearchIndex - By Location - USA",
                new CountryTypeSpecificRoute(
                    CountryType.UnitedStates,
                    "search/{locationType}-in-{query}",
                    new { controller = "Search", action = "Index", query = UrlParameter.Optional },
                    new { locationType = new UsaLocationSearchRouteConstraint() },
                    "Search")
            );

Notez le dernier paramètre "Recherche" - pour le nom de la zone.

Je ne sais pas comment ça marche, mais ça marche. Je suppose que le moteur de routage interne recherche les routes qui implémentent IRouteWithArea .

Problème résolu !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X