Question

J'ai les deux itinéraires suivants définis dans mon application MVC.; - Pour le moment, je dispose de deux "MVC Afficher les pages de contenu". défini

/ShowName/NameById
/ShowName/Index

Cependant, le contenu de ces deux pages est identique? Est-il possible que deux itinéraires partagent la même page de contenu? Sinon, puis-je a) créer une seule règle pour les deux routes ou b) dois-je créer un contrôle utilisateur à partager entre les deux pages de contenu pour afficher mes données?

    routes.MapRoute(
       "NameById",
       "Name/{theName}/{nameId}",
        new
        {
            action = "NameById",
            controller = "ShowName",
            theName = "Charley"
        }
        ,new { nameId = @"\d+" }
   );

    routes.MapRoute(
       "ShowName",
       "Name/{theName}",
        new
        {
            action = "Index",
            controller = "ShowName",
            theName = "Charley"
        }
   );

MODIFIER J'ai lu les réponses ci-dessous et j'ai les méthodes de résultat d'action suivantes. Si je supprime l’une des méthodes (par exemple, l’Index), comment puis-je réécrire mes itinéraires sur un seul itinéraire?

public ActionResult Index(string theName)
public ActionResult NameById(string theName, int? nameId)

Donc, les travaux suivants fonctionnent le travail de l'URL?

/Name/Charley
/Name/Charley/11234
Était-ce utile?

La solution

Avez-vous vraiment besoin de 2 itinéraires différents? Vous pouvez créer le modèle pour votre route d'index

Name/{theName}/{nameId}

et faites de nameId une entrée nullable pour votre action. Ajoutez simplement une logique à votre action pour vérifier si nameId a une valeur et agit en conséquence.

Autres conseils

Vous pouvez créer une vue partielle pour la zone de détail de la page, en conservant la séparation des deux actions au cas où elles changeraient ultérieurement. Ou vous pourriez simplement

return View("DetailView", model);

Mais cela peut introduire une chaîne supplémentaire à gérer entre les deux actions du contrôleur. Étant donné que MVC ne prend pas en charge la surcharge par nom d’action (sauf si vous avez une paire GET / POST, sans arguments), vous pouvez simplement vérifier le paramètre {nameId} et voir s’il est vide / null avant de l’utiliser.

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