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 :

problème vues partielles dans un formulaire


Sujet :

ASP.NET MVC

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut problème vues partielles dans un formulaire
    Bonjour,

    J'ai un soucis lors de la validation d'un formulaire quand je veux rajouter plusieurs vues partielles à intérieurs.

    voici en gros mon code :

    j'ai une classe composer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Customer
    {
         public Int32 Id {get;set;}
         public String Name {get;set}
         public Address Address {get; set;}
    }
    Voici la partie du formulaire dans ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     <% using (Html.BeginForm())
    { %>
       <%: Html.HiddenFor(model => model.Customer.Id)%>
       <%: Html.LabelFor(m => m.Customer.FirstName)%>
       <%: Html.TextBoxFor(m => m.Customer.FirstName)%>
     
       <%: Html.RenderPartial("DetailsAddress",Model.Address);%>
     
       <input class="input" type="submit" value="Valider" />
    <%}%>
    Et enfin la partie dans l'ascx DetailsAddress

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <%: Html.LabelFor(m => m.Number)%>
     <%: Html.TextBoxFor(m => m.Number)%>
     ...
    Le problème c'est que lorsque je valide mon formulaire, la partie sur l'adresse est vide car apparemment MVC ne récupère pas ce que je rajoute dans l'ascx.

    Si quelqu'un à une piste sur comment utiliser dans un formulaire des ascx, car je n'arrive pas à trouvé sur internet.

    Merci,

    PS : je suis en MVC 2

  2. #2
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Salut,

    je comprend pas pourquoi tu met les lambda m.Customer.X

    essaye ceux-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     <% using (Html.BeginForm())
    { %>
       <%: Html.HiddenFor(model => model.Id)%>
       <%: Html.LabelFor(m => m.FirstName)%>
       <%: Html.TextBoxFor(m => m.FirstName)%>
     
       <%: Html.RenderPartial("DetailsAddress",Model.Address);%>
     
       <input class="input" type="submit" value="Valider" />
    <%}%>
    Et sinon peux-tu mettre le code de ton controller ?
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Oui pardon pour les expressions lambdas c'est un copier coller foireux que je n'ai pas vu.

    le contrôleur n'a rien de spéciale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ActionResult Register()
    {
       Customer c = new Customer()
       {
          Address = new Address()
       };
     
       return View(c);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [HttpPost]
    public ActionResult Register(Customer model)
    {
       //ici model.Nom vaut bien quelques choses mais model.Address vaut Null.
       return View(model);
    }

  4. #4
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Pour le contrôleur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public ActionResult Register()
    {
         Customer c = new Customer();
         return View(c);
    }
    Peux-tu mettre le code du controlleur qui reçoie le HttpPost ?
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Je te l'ai mis dans le post d'avant.

    J'ai validé mon post avant d'avoir fini de l'écrire....

  6. #6
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Deux solution, je pense:

    1-
    Met le même typage de model pour l'aspx et l'asx

    Pour l'aspx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    <%: Html.RenderPartial("DetailsAddress",Model);%>
    ...
    Pour l'ascx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%: Html.LabelFor(m => m.Address.Number)%>
     <%: Html.TextBoxFor(m => m.Address.Number)%>
     ...
    2-
    Pour l'ascx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%: Html.Label(Model.NumberOne)%>
     <%: Html.TextBox(Model.NumberTwo)%>
     ...
    Et le controlleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [HttpPost]
    public ActionResult Register(Customer model, string numberOne, string numberTwo)
    {
       // Ajouter au model les address
     
       //ici model.Nom vaut bien quelques choses mais model.Address vaut Null.
       return View(model);
    }
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Merci de ta réponse mais tes deux solutions ne me plaisent pas trop.

    Par contre ta deuxième proposition m'a donné l'idée de faire ça dans mon contrôleur (j'ai laissé les labelfor et textboxfor dans mon ascx):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      [HttpPost]
       public ActionResult Register(Customer c, Address a)
       {
             c.Address = a; 
             return View(c);
       }
    Et cette solution marche j'ai bien la variable c remplit par les champs de mon aspx et la variable a remplit par mon ascx.

    J'avoue que je comprend pas bien pourquoi je suis obligé de procédé comme ça. Mais bon temps que j'ai pas trouvé d'autre solution ...

    Merci encore.

  8. #8
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Le problème vient du faite que ton aspx et ascx non pas le même typage de model. Et pense à passer ton topic en résolus.
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Ok merci je comprend mieux.

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

Discussions similaires

  1. Problème de superposition dans un formulaire
    Par vallica dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 17/01/2007, 15h20
  2. Problème de filtre dans un formulaire acess
    Par cdbaloo dans le forum Access
    Réponses: 4
    Dernier message: 31/03/2006, 17h25
  3. problème d'accents dans le formulaire de contact
    Par Rocket666 dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2006, 14h38
  4. problème d'accents dans le formulaire de contact
    Par Rocket666 dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2006, 14h48
  5. problème de calcul dans un formulaire
    Par Bray02 dans le forum IHM
    Réponses: 1
    Dernier message: 07/12/2005, 11h45

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