IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

lien vers action de Controller de même nom


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut lien vers action de Controller de même nom
    Bonjour,

    J'ai crée un controller AuteurController qui comporte deux actions de même nom AjouterAuteur : l'une permet l'affichage de saisie d'un auteur, l'autre permet le post d'un auteur en BDD.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public ActionResult AjouterAuteur()
     
           {
                VM_Auteur auteur = new VM_Auteur();
     
                return View("AjouterAuteur", auteur);
     
     
     
     
            }
     
     
            [HttpPost]
            public ActionResult AjouterAuteur(VM_Auteur auteur)
            {
                if (ModelState.IsValid)
                {
                    context.Auteurs.Add(auteur);
                    context.SaveChanges();
     
     
                     return RedirectToAction("GetAll");
                  }
     
                else
                {
                    //si saisie erronée , retour à la même vue , pour resaisie d'un VM_Auteur
                    return View("AjouterAuteur", auteur);
     
                }
     
            }//fin de l'action AjouterAuteur

    Dans la vue _layout.cshtml, j'ai crée un dropdown avec des liens vers les differentes actions du controller AuteurController

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
     
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-2">
                    <ul class="nav navbar-nav">
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Auteurs<span class="caret"></span></a>
                            <ul class="dropdown-menu" role="menu">
     
                                <li><a href="~/Auteur/GetAll">Catalogue des auteurs</a></li>
                                <li class="divider"></li>
                                <li><a href="~/Auteur/AjouterAuteur">Ajouter un auteur</a></li>
                                <li class="divider"></li>
                                <li><a href="">Modifier un auteur</a></li>
                                <li class="divider"></li>
                                <li><a href="">Supprimer un auteur</a></li>
                            </ul>
                        </li>
    Comment expliquer que le lien vers l'action AjouterAuteur est bien le lien vers le post du nouvel auteur en BDD et pas l'action d'affichage pour la saisie d'un auteur?


    Par ailleurs, ~ , dans le chemin <a href="~/Auteur/AjouterAuteur">~ représente la racine de l'application web .

    Merci de me dire si la racine de l'application web est bien le repertoire où le fichier .sln est stocké (ex: le repertoire \e_bibliotheque_MVC)ou s'il s'agit du lien http://localhost:50646

    Merci beaucoup de votre aide.

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    La racine de l'application n'est pas l'emplacement de ton SLN, et pas obligatoirement http://localhost:50646.
    C'est le chemin que tu définis par défaut lorsque tu paramètres tes routes.

    En ce qui concerne ton problème de nommage, la solution est toute simple et tu aurais dû la trouver tout seul : change l'un des nom.
    Nomme par exemple celui qui affiche l'écran "AfficheEcranSaisieUtilisateur" est il n'y a plus de confusion possible.
    Le nommage c'est la base !!!!

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut
    Bonjour et merci de ta réponse.

    En effet, j'avais déjà modifié les nom des actions pour qu'il n'y ait pas confusion.

    Mais je voulais savoir comment le compilateur reconnait l'action à effectuer sans se tromper, au cas où 2 actions du controller ont le même nom mais pas le même code.

    Route-il vers la première action qu'il rencontre? Telle etait ma question.

    A propos du chemin défini par défaut quand je paramètre mes routes, puis je le retrouver dans le code ci-dessous ?

    Et si oui, comment le comprendre et le retrouver ?

    Merci encore beaucoup de ton aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Mais je voulais savoir comment le compilateur reconnait l'action à effectuer sans se tromper, au cas où 2 actions du controller ont le même nom mais pas le même code.
    Route-il vers la première action qu'il rencontre? Telle etait ma question.
    Le compilateur n'a rien à voir là dedans.
    C'est IIS qui va router en fonction de ce que tu lui passes.
    S'il trouve une route qui correspond à ce que tu lui passe, il va afficher la page, sinon tu aura 404 (voire 405 si tu appelles en POST au lieu de GET)

    Tu as une routine sans paramètre et sans précision du verbe (donc en GET).
    Tu auras un 200 et la vue correspondante affichée si tu appelles http://localhost:50646/Auteur/AjouterAuteur en GET sans lui fournir de paramètre.
    Tu auras un 404 (Not Found) si tu appelles http://localhost:50646/Auteur/AjouterAuteur en GET avec des paramètres
    Tu auras un 404 (Not Found) si tu appelles http://localhost:50646/Auteur/AjouterAuteur en POST sans lui fournir de body ou de paramètre
    Tu auras un 405 (Method not allowed) si tu appelles http://localhost:50646/Auteur/AjouterAuteur en GET en lui fournissant un body

    Tu as une routine avec un paramètre et tu as précisé que le verbe est POST.
    Tu auras 200 (ou un redirect) et le résultat de l'action si tu http://localhost:50646/Auteur/AjouterAuteur en POST avec un body correspondant à un auteur
    Tu auras un 404 (Not Found) si tu appelles http://localhost:50646/Auteur/AjouterAuteur en POST avec un body qui ne correspond pas à un auteur.


    A propos du chemin défini par défaut quand je paramètre mes routes, puis je le retrouver dans le code ci-dessous ?
    Et si oui, comment le comprendre et le retrouver ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    [/QUOTE]

    Si tu n'a pas défini de route ailleurs qui surchargerai ce code, alors oui c'est ici qu'est paramétré ton chemin par défaut.
    En partant du principe que tu n'a pas de surcharge, ton chemin par défaut sera http://localhost:50646 et il correspondra en réalité au chemin http://localhost:50646/Home/Index.
    Cela se vérifie simplement en tapant l'URL longue. Si c'est la même page qui s'affiche alors c'est bien ta page de démarrage.

    Ce chemin correspond à ton contrôleur Home et à la méthode Index que tu as mis dedans, et par extension à la vue qui par défaut doit se trouver sous Views/Home/Index.cshtml.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    968
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 968
    Points : 141
    Points
    141
    Par défaut
    Merci beaucoup pour toutes ces explications que je vais reprendre bien sérieusement!! (et eventuellement revenir vers toi si besoin)



    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

Discussions similaires

  1. lien vers deux actions de controller de même nom
    Par new_wave dans le forum Framework .NET
    Réponses: 0
    Dernier message: 10/06/2024, 14h40
  2. [CakePHP] Liens avec accent renvois vers et un controller et une action
    Par Joretapo17 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/02/2015, 09h44
  3. Lien vers une page web + action javascript
    Par thais781 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/05/2013, 19h57
  4. Liens vers des Web user controls ?
    Par Invité dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/05/2008, 12h24
  5. [Debutant] Form (Action,Post), lien vers ma servlet
    Par tck-lt dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/12/2006, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo