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 :

Surcharge d'actions dans le controleur [Débutant(e)]


Sujet :

ASP.NET MVC

  1. #1
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut Surcharge d'actions dans le controleur
    Bonjour,

    Est-ce possible, avec le MVC3 de faire une surcharge d'actions dans le controleur?
    J'ai testé, sans avoir réellement trouvé la moindre info là-dessus, et n'ai que réussi à obtenir cette erreur :
    The current request for action 'Create' on controller type 'InterviewController' is ambiguous between the following action methods:
    System.Web.Mvc.ViewResult Create() on type MvcApplication4.MvcApplication4.InterviewController
    System.Web.Mvc.ViewResult Create(Int32) on type MvcApplication4.MvcApplication4.InterviewController

    En fait, dans mon projet, je dois créer des interviews. Une interview peut être soit avec un client, soit avec un candidat, soit avec les 2. J'aimerais avoir 3 actions dans mon contrôleur qui renvoient chacune à la même vue.

    première action, action par défaut : action qui me retourne une vue "vide" dans laquelle je peux choisir n'importe quel client, et n'importe quel candidat.
    2ème action : appelée depuis une fenêtre "candidat", elle me retournerait la vue avec le champ "candidat" pré-rempli
    3ème action : appelée depuis une fenêtre "client", elle me retournerait la vue avec le champt "client" pré-rempli.

    Une idée de la méthode que je peux utiliser pour cette surcharge?

    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
     
                   '
            ' GET: /Interview/Create
     
            Function Create As ViewResult
                ViewBag.FK_int_contact = New SelectList(db.contact, "idContact", "nom")
                ViewBag.FK_int_opport = New SelectList(db.opportunite, "idOpportunite", "RefOpportunite")
                return View()
            End Function
     
     
            '
            ' GET: /Interview/Create/5
     
            Function Create As ViewResult
                ViewBag.FK_int_contact = New SelectList(db.contact, "idContact", "nom")
                ViewBag.FK_int_opport = New SelectList(db.opportunite, "idOpportunite", "RefOpportunite")
                return View()
            End Function
    Pour le moment, je n'ai encore que ça comme code. En plus de ne pas savoir comment faire la surcharge, je ne sais pas encore comment je ferai pour pré-sélectionner les champs.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Je pense qu'il faut préciser explicitement les routes dans le global.asax et ne pas utiliser la route par défaut.

  3. #3
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    Un petit exemple possible? Parce que je ne comprends pas bien ce que vous me proposez.

    En fait, je vois bien le fichier global.asax.
    J'ai fait une recherche rapide sur comment faire une route par défaut. http://weblogs.asp.net/scottgu/archi...l-routing.aspx

    Mais je ne vois pas où vous voulez en venir.


    édit : je ne comprends pas, parce que si je tape simplement l'URL localhost/Interview/Create, ou localhost/Interview/Create/1, j'obtiens la même erreur.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Points : 133
    Points
    133
    Par défaut
    Est-ce possible, avec le MVC3 de faire une surcharge d'actions dans le controleur?
    Malheureusement tu n'as pas comme dans tout langage la possibilité de surcharger les méthodes en indiquant des prototypes différents avec les mêmes noms de méthodes.

    J'aimerais avoir 3 actions dans mon contrôleur qui renvoient chacune à la même vue
    Par contre tu peux très bien renvoyer la vue que tu veux à la fin de ta méthode en l'indiquant explicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return View("nomDeLaVue")
    Ou encore avec un modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return View("nomDeLaVue", model)
    Tu auras alors 3 méthodes create avec des noms différents mais qui renvoient sur la même vue
    La Solution AGILE de Cartographie et d'Urbanisation des Systèmes d'Information éditée et développée par la société AB+ SOFTWARE
    https://www.abplussoftware.fr

  5. #5
    Membre régulier
    Homme Profil pro
    .Net developer
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net developer

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Points : 91
    Points
    91
    Par défaut
    Pas con le truc pour retourner la vue... J'avais abandonné mon idée de surcharge. J'avais créé une nouvelle action, avec sa propre vue, dont le code était à 100% exactement le même qu'une autre vue.


    Par contre, le pré-remplissage dont le parlais me pose problème...

    En fait, je n'arrive pas à ne remplir qu'un seul champ. La solution que j'ai trouvé pour pallier ce souci est vraiment bancale. J'ai rajouté une ligne dans la DB qui n'a qu'un seul champ de rempli... Mais bon... Ca ne marche pas trop à cause de champs obligatoires :-(

    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
     
        '
        ' GET: /Opportunite/Create_client
     
        Function Create_client(idclient) As ViewResult
            'Dim FK_Client = (From e In db.client
            'Where(e.idClient = idclient)
            '                    Select e.nomCompteClient).ToString()
            'ViewBag.FK_client = New SelectList(db.client, "idClient", "nomCompteClient", idclient)
            Dim opportunite As opportunite = db.opportunite.Single(Function(o) o.idOpportunite = 5)
            opportunite.FK_Client = idclient
            ViewBag.FK_Client = New SelectList(db.client, "idClient", "nomCompteClient", opportunite.FK_Client)
     
            Return View(opportunite)
        End Function

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Sinon sert toi des parametres nullables genre un Nullable(of int)

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Points : 133
    Points
    133
    Par défaut
    Pas con le truc pour retourner la vue... J'avais abandonné mon idée de surcharge. J'avais créé une nouvelle action, avec sa propre vue, dont le code était à 100% exactement le même qu'une autre vue.
    Ce serait dommage d'avoir des méthodes redondantes quand même !!
    La Solution AGILE de Cartographie et d'Urbanisation des Systèmes d'Information éditée et développée par la société AB+ SOFTWARE
    https://www.abplussoftware.fr

Discussions similaires

  1. [2.x] Mapping automatique des paramètres d'actions dans les controleurs
    Par Dimitri69 dans le forum Symfony
    Réponses: 5
    Dernier message: 20/02/2012, 16h32
  2. Surcharge d'actions dans un controller?
    Par john85 dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 03/06/2011, 19h32
  3. [FLASH MX2004] Actions dans un DataGrid
    Par aldo-tlse dans le forum Flash
    Réponses: 3
    Dernier message: 25/11/2005, 12h46
  4. [JSP]meme action dans 2 jsp
    Par zach dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/02/2005, 08h34
  5. [C#] Déclencher action dans Repeater avec LinkButton
    Par globeriding dans le forum ASP.NET
    Réponses: 13
    Dernier message: 13/05/2004, 15h29

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