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
où 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'
Par exemple, je n'arrive pas à passer le paramètre aIdentifiantCours à ma méthode "GestionStagiaires" lorsque je tape l'URL suivant :
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); } } }
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
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 !
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); } } }
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]
Partager