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 :

Gestion des formulaires


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut Gestion des formulaires
    Bonjour à tous !

    Je débute en asp.net mvc 4 (moteur razor), et je rencontre actuellement un problème.

    Je suis en train de créer un formulaire. Pour la réalisation de ce formulaire, j'utilise des HTMLHelper (que je découvre, très bon outil !). L'avantage est que dans la vue, on a la possibilité de spécifier le model, et effectuer l'ajout dans le model directement.

    Dans ma view, je fais donc appel au model qui me permet d'enregistrer le formulaire. Cependant, il y a un soucis.

    Le formulaire en question a un champs qui peut être ajouté plusieurs fois (selon le choix du client). En gros dans le formulaire, l'utilisateur clique sur un bouton, peut ajouter plusieurs champs <input>.

    Exemple du formulaire :

    (champs input)
    -Nom
    -Prenom
    -Age

    (bouton)
    -Cliquez pour ajouter un véhicule

    (champ input)
    -Nom Vehicule 1
    -Nom Vehiule 2
    ...
    -Nom Vehicule N


    Au niveau de model, ce que j'ai crée :
    -une classe User(Id, nom, prenom, age)
    -une classe Voiture ( Id, nomVoiture, IdUser)


    Donc dans une view, je ne peux ajouter qu'un seul model (@model User), comment puis-je gérer mes véhicules ? Je ne peux pas ajouter mes véhicules dans la classe User....


    En espérant avoir été assez clair, si vous ne comprenez pas dites le moi :-)

    EN vous remerciant d'avance.

    ________________________________________________________________

    edit :

    Je viens de penser à créer un champs nomVoiture, de type list<string> au niveau du modele. On se retrouve donc avec une seule table User (Id, nom, prenom, age, nomVoiture).

    Ma question est de savoir comment puis-je gérer les champs input des voitures ?

    Par exemple pour l'ajout de deux voiture, je vais créer deux champs input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Html.TextBoxFor(m => m.nomVoiture)
    @Html.TextBoxFor(m => m.nomVoiture)
    Est ce la bonne syntaxe ?

    Au niveau du modele j'ai donc fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<string> nomVoiture { get; set; }

    Suis je sur la bonne voie ?

  2. #2
    Membre expérimenté Avatar de M_Makia
    Homme Profil pro
    dev
    Inscrit en
    Février 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 121
    Par défaut
    Bonjour vik93,

    Pour bien maitrisé le binding d'un formulaire vers un model il est nécessaire de bien comprendre la mécanique utilisé par Asp.Net MVC.

    Pour qu'un champ soit "binder", il faut que le nom de ta propriété dans ton model soit identique a l'attribut "name" de ton input Html

    Model de ta vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    public class Personne
    {
       public string Nom {get;set;} 
       public string Prenom{get;set;}
       public string Age{get;set;}
     
       public List<string> Voitures {get;set;}
     
    }

    Champs dans ton formulaire ( sans utiliser les helpers) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     <label>Nom: <label><input type="text" name="Nom" value="@Model.Nom"><br>
     <label>Prenom <label><input type="text" name="Prenom" value="@Model.Prenom"><br>
     <label>Age<label><input type="text" name="Age" value="@Model.Age"><br>
     
    Voitures :
    <div>
    @foreach(var v in Model.Voitures)
    {
     <input type="text" name="Voitures" value="@v"><br>
    }
    <div>
    Je t'ai mis un exemple sans l'utilisation des helpers Html.
    Ce qui est important ici c'est l'attribut "name=Voitures" qui est identique au nom dans ton model objet.
    Tu vas te retrouver avec plusieurs input text avec le meme "name" donc le model binder MVC va en deduire que c'est une collection.
    A noté que pour que le binding se fasse , il faut que dans ton model tes propriétés soit public ainsi que le set et le get de ta propriété.

    Le binding est juste fabuleux on peut faire des choses bien plus complexe avec !

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    Bonjour,

    Merci pour votre réponse !

    Donc ce que j'ai fait, est juste alors ? Dans mon model, j'ai mis nomVoiture, pareil dans la view.

    Si le fait de mettre plusieurs fois le même "name" est reconnu comme une collection, le type List<string> ne peut donc pas fonctionner ? Il faut que je déclare en tant que Collection ?

  4. #4
    Membre expérimenté Avatar de M_Makia
    Homme Profil pro
    dev
    Inscrit en
    Février 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 121
    Par défaut
    Le type importe peu, je parlais d'une collection au sens large.
    - List<String>
    - IList<String>
    - IEnumerable<String>
    - ICollection<String>
    - string[]

    Toutes ces déclarations doivent fonctionner.
    Attention, cette méthode fonctionne bien lorsque c'est une liste simple => Ex : List<string>, List< int> , List< double>, List< bool> ect ...
    Si tu souhaite binder une liste d'objet complexe comme une liste de personne, c'est une autre méthode qu'il faut utiliser.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2012
    Messages : 48
    Par défaut
    Merci encore pour ta réponse

    Du coup je vais profiter de ta présence pour poser une autre question (juste pour la knowledge) :

    Si en plus de la table user, je fais une table comme celle ci :

    User(Id, nom, prenom, age)
    Voiture(Id, nom, Id_User)

    Comment puis-je gérer le "binding" pour ajouter une voiture dans la table Voiture, tout en sachant que je ne peux déclarer qu'un seul model (@model models.User) par view ?

  6. #6
    Membre expérimenté Avatar de M_Makia
    Homme Profil pro
    dev
    Inscrit en
    Février 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 121
    Par défaut
    Citation Envoyé par vik93 Voir le message

    Si en plus de la table user, je fais une table comme celle ci :

    User(Id, nom, prenom, age)
    Voiture(Id, nom, Id_User)

    Comment puis-je gérer le "binding", tout en sachant que je ne peux déclarer qu'un seul model (@model models.User) par view ?
    Tu te poses les bonnes questions !
    La bonne pratique et non pas de mettre ton objet User en tant que model de ta vue mais plutot de construire un autre object appelé un "ViewModel" qui encapsule ton objet User

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public class UserViewModel
    {
       public User  Utilisateur {get;set;}
       public Voiture Voiture {get;set}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @model Models.UserViewModel
     
    <form>
     
    <label>Nom: <label><input type="text" name="Utilisateur.Nom" value="@Model.Utilisateur.Nom"><br>
    <label>Prenom <label><input type="text" name="Utilisateur.Prenom" value="@Model.Utilisateur.Prenom"><br>
    <label>Age<label><input type="text" name="Utilisateur.Age" value="@Model.Utilisateur.Age"><br>
     
    <label>Voiture<label><input type="text" name="Voiture.Nom" value="@Model.Voiture.Nom"><br>
     
    </form>
    De cette façon tu peux binder tout ce que tu souhaites dans ton model.
    A noté que ce ViewModel sert a "stocké" ton objet "métier" ou tout autres choses qui peux te servir dans la vue.
    Le principe du ViewModel est basé sur un pattern appelé MVVM initialement introduit en WPF, je t'encourage a t'y intéresser.

Discussions similaires

  1. Gestion des formulaires dans un projet adp
    Par Jertho dans le forum Modélisation
    Réponses: 1
    Dernier message: 05/10/2009, 15h11
  2. Gestion des formulaires
    Par Masmeta dans le forum Windows Forms
    Réponses: 7
    Dernier message: 20/03/2008, 16h58
  3. Réponses: 4
    Dernier message: 22/01/2008, 17h05
  4. [Form] Gestion des formulaires
    Par R1pToR dans le forum Struts 1
    Réponses: 5
    Dernier message: 10/07/2007, 15h47
  5. Gestion des formulaires
    Par Neuromancien2 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 09/03/2007, 23h40

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