Question

Je pensais que ce serait assez facile, mais je suis totalement déconcerté.

Je souhaite que les vues d'un contrôleur se trouvent au niveau racine de l'application plutôt que dans un sous-répertoire de ce contrôleur, mais je ne peux pas le comprendre.

J'aimerais avoir ces deux URL:

/ Info - Cela devrait être l'action " Info " sur le contrôleur & "Accueil &";

/ Admin / - Cela devrait être l'action " Index " (valeur par défaut) sur le contrôleur " Admin "

Jusqu'à présent, peu importe ce que j'ai essayé, le premier itinéraire finira par rattraper les deux. Je n'arrive pas à séparer les deux.

Cette page d’information n’a même pas besoin d’un contrôleur, c’est statique, mais je souhaite utiliser une page maître. Il existe peut-être un moyen beaucoup plus simple de résoudre ce problème, mais je ne l'ai pas compris non plus.

Tout ce à quoi je pourrais penser serait de créer un contrôleur d'informations et de déplacer Views / Home / Info vers Views / Info / Index, mais cela a une odeur particulière.

J'ai pu le faire dans les rails en utilisant:

  map.connect ':controller/:action/:id'
  map.connect ':action', :controller => 'home'
Était-ce utile?

La solution

Vous avez juste besoin de routes appropriées. Dans votre cas:

routes.MapRoute(
                "Info",
                "Info",
                new { controller = "Home", action = "Info" }

routes.MapRoute(
                "Admin",
                "Admin",
                new { controller = "Admin", action = "Index" }

Mais je vous recommande de cette approche.

Si vous devez modifier l'emplacement physique par défaut des vues / vues partielles,
Découvrez comment créer des moteurs d'affichage personnalisés.

Autres conseils

Vous pouvez utiliser les attributs de route.

Vous devriez avoir dans le fichier de configuration de votre route.

        routes.MapMvcAttributeRoutes();
        AreaRegistration.RegisterAllAreas();
        //code below should already be in your route config by default
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

Ensuite, au-dessus de chaque action, vous pouvez avoir un attribut d'itinéraire.

 [Route("info")]

Vous pouvez même aller plus loin avec ces attributs en ajoutant des paramètres et / ou des sous-dossiers

 [Route("blog/posts/{postId}")]

Vous pouvez attribuer l'attribut ci-dessus à n'importe quelle action. Il apparaît alors comme provenant du contrôleur de blog. Cependant, vous n'avez même pas besoin d'un contrôleur de blog. De plus, le signe {} désigne le paramètre. Assurez-vous donc que votre action prend le même paramètre que les accolades. Dans ce cas, le paramètre serait

string postId
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top