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

ASP.NET MVC Discussion :

[MVC] Passage de paramètre à une méthode de contrôleur via l'URL=> Question


Sujet :

ASP.NET MVC

  1. #1
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut [MVC] Passage de paramètre à une méthode de contrôleur via l'URL=> Question
    Bonjour,

    Je débute en ASP.NET MVC et j'aimerais poser une question :

    Dans tous les tutoriaux MVC que je lis, il est indiqué que pour passer des paramètres à une méthode de contrôleur via l'URL, il suffit de faire quelque chose du style :

    /Home/Index/2

    Home => Contrôleur (HomeController)
    Index => Méthode de contrôleur
    2 => Paramètre

    En gros, mon problème est que je n'arrive pas à passer de paramètres à une méthode de contrôleur via cette façon d'écrire l'URL.

    Je vais prendre 2 exemples pour étayer mes propos. Dans mon projet MVC :
    J'ai un modèle 'stagiaire'.
    J'ai un contrôleur 'StagiaireController' lié à ce modèle.

    Code du contrôleur 'StagiaireController'

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
     
    using MvcApplication1.Models.Personne;
    using MvcApplication1.Models.Formations;
     
     
    namespace MvcApplication1.Controllers
    {
     
        public class StagiaireController : Controller
        {
     
            public ActionResult Index()
            {
                return View();
            }
     
            public ActionResult Test(int abc)
            {
                return RedirectToAction("GestionStagiaires");
            }
     
     
     
            public ActionResult GestionStagiaires(int? aIdentifiantCours)
            {
                List<Stagiaire> oListeStagiaires = null;
                if (aIdentifiantCours.HasValue)
                {
                    Cours oCours = Cours.GetInstance(aIdentifiantCours.Value); // Obtention d'un  cours grâce à son id
                    oListeStagiaires = oCours.GetListeStagiaires(); // Obtention de la liste de stagiaires participant à ce cours
                }
                else
                {
                    oListeStagiaires = Stagiaire.ListeStagiaires; //=> Liste de tous les stagiaires
                }
     
     
                return View(oListeStagiaires);
            }
        }
    }
    Par exemple, je n'arrive pas à passer le paramètre aIdentifiantCours à ma méthode "GestionStagiaires" lorsque je tape l'URL suivant :

    http://localhost:2751/Stagiaire/GestionStagiaires/2
    => /Stagiaire/GestionStagiaires/2 => Le paramètre est ignoré

    Par contre, j'arrive à passer ce paramètre avec cet URL (dont j'ai récupérer la syntaxe grâce aux html.ActionLink ..)

    http://localhost:2751/Stagiaire/Gest...tifiantCours=2
    => /Stagiaire/GestionStagiaires/?aIdentifiantCours=2 => le paramètre est pris en compte


    De même, pour ma méthode 'Test' de 'StagiaireController' =>
    Lorsque je tape l'URL : /Stagiaire/Test/3 => cela entraine une erreur.
    Lorsque je tape l'URL : /Stagiaire/Test/?abc=3 => cela fonctionne.


    Pourquoi cela ne fonctionne t-il pas avec la 1ere façon décrire l'URL ? Alors que je ne vois que cette syntaxe dans les tutoriaux..?


    Merci de votre aide.


    [EDIT]

    J'ai fait quelques tests et quelques recherches sur mon projet, je pense que mon problème est en partie lié au routage dans le fichier Global.asax.cs de mon projet.

    Voici le contenu de ce fichier par défaut :


    Contenu du fichier Global.asx.cs par défaut
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
     
    namespace MvcApplication1
    {
        // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
        // visit http://go.microsoft.com/?LinkId=9394801
     
        public class MvcApplication : System.Web.HttpApplication
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     
                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                );
            }
     
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
     
                RegisterRoutes(RouteTable.Routes);
            }
        }
    }
    Lorsque j'essaye de passer des paramètres via la syntaxe URL n°1 (celle des tutoriaux, censé fonctionner (ex : /Home/Index/1 )) à des méthodes de contrôleur qui ont dans leur signature, un paramètre nommé id, cela fonctionne !
    Si je change ce paramètre id en idToto dans la signature de ma méthode, la méthode via syntaxe URL n°1 ne fonctionne plus !

    J'en déduis que c'est lié à ce qui est écrit dans ce fichier Global.asax.

    Quelqu'un peut il m'expliquer un peu plus en détails le fonctionnement de ce système de routage et son implication dans le passage de paramètre via la syntaxe URL n°1 ( ex: Home/Index/1)


    [/EDIT]

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    Ce comportement vient effectivement de ton routage. La ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    routes.MapRoute(
       "Default", // Route name
       "{controller}/{action}/{id}", // URL with parameters
         new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                );
    Mappe automatiquement le premier parametre sur ton controlleur (home par defaut), puis sur une action (index par défaut), et passe à cette action un paramètre id, qui va (ou pas) etre en troisième position.

    Le fait de passer toujours Id est une convention, que tu peux redefinir

    MVC marche beaucoup avec des conventions, mais, une fois que tu auras intégré tout ca, je te souhaite plein de fun

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    Merci.
    Oui je viens de comprendre le principe et le système de routing en MVC que je n'avais pas intégré.

    Voici le lien vers les tutos MVC de Developpez.com avec notamment la section "Le routing".
    http://dotnet.developpez.com/mvc/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/09/2014, 15h49
  2. Problème de passage de paramètres à une méthode
    Par azimut01 dans le forum VB.NET
    Réponses: 0
    Dernier message: 26/02/2009, 21h38
  3. Action - passage de paramètres à une méthode
    Par burhud dans le forum Struts 2
    Réponses: 3
    Dernier message: 16/10/2007, 10h12
  4. Problème de passage de paramètres à une procedure
    Par momo62 dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 22/12/2005, 15h22
  5. [XSLT][Saxon]passage de paramètres à une template
    Par RB Greg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 12/05/2005, 16h29

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