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 :

MVC4 formulaire, liste d'un model impossible à recuperer en HttpPost


Sujet :

ASP.NET MVC

  1. #1
    Membre confirmé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur HTML / Developpeur .NET

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Points : 469
    Points
    469
    Par défaut MVC4 formulaire, liste d'un model impossible à recuperer en HttpPost
    Bonjour à tous,

    j'essaye de développer un formulaire, où le but est de saisir différents filleuls.
    J'ai donc fait une boucle for dans ma view pour appeler, autant de fois que voulu, une partial view.

    Ma view s'appuie sur un GodsonsViewModel, et ma partial view sur un GodsonModel que je définirai plus bas.

    Mon problème : lorsque je récupère mes données au niveau du controller, le GodsonViewModel existe bien avec toutes ses propriétés, mais la liste de GodsonModel reste à null. J'imagine que l'erreur se trouve plutôt au niveau de la partial view mais pas moyen de trouver une solution qui fonctionne.

    ps : J'ai simplifié le formulaire pour un soucis de lisibilité.

    ViewModel - GodsonsViewModel.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class GodsonsViewModel
        {
            /// <summary>
            /// Nombre de filleuls potentiel
            /// </summary>
            public int GodsonNumber { get; set; }
     
            /// <summary>
            /// Listes des informations d'un filleul
            /// </summary>
            public List<GodsonModel> Godsons { get; set; }
        }
    Model - GodsonModel.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class GodsonModel
    {
            /// <summary>
            /// Nom du filleul
            /// </summary>
            [Required]
            [Display(Name="Nom*")]
            public string Name { get; set; }
    }
    View - Test.cshtml
    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
     
    @model Total.ViralMarketing.Models.GodsonsViewModel
     
    @using (Html.BeginForm())
    {
        @Html.HiddenFor(m => m.GodsonNumber)
     
        for (int i = 0; i < Model.GodsonNumber; i++)
                            {
                                Html.RenderPartial("_GodsonInfos", new ViewDataDictionary {
                                    { "Index" , i },
                                    { "Functions", ViewBag.Functions }
                                });
                            }
    }
    Partial View - PartialTest.cshtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @model Total.ViralMarketing.Models.GodsonModel
     
    @{
        int godsonNumber = ViewBag.Index + 1;
     
        string test = "Godsons[" + ViewBag.Index.ToString() + "].";
    }
     
    @godsonNumber
     
    @Html.TextBoxFor(m => m.Name, new { id = "name" + ViewBag.Index })
    Controller - ControllerTest.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [HttpPost]
    public ActionResult CreateSponsorship(GodsonsViewModel godsonsViewModels)
    {
         return View();
    }

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Je vous propose de vérifier le contenu de votre POST avec un débuggeur dans Chrome ou dans Firefox (touche F12).

    Je l'utilise souvent pour voir ce qui transite vraiment et ça me permet très souvent de résoudre ce type de problème.

    Avez-vous essayé ? Quel est le contenu ?

    Pascal
    Découvrez DotnetDojo, pour booster vos compétences de développeur

  3. #3
    Membre confirmé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur HTML / Developpeur .NET

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Points : 469
    Points
    469
    Par défaut
    Bonjour,

    Oui j'avais tenté de généré moi même le name de mes contrôles, mais ça n'avait rien changé. En réalité, c'est une partie de la solution.
    En effet, recréer un ViewDataDictionnary me faisait perdre toutes les données du ViewData, et rendait impossible le mapping des données de ma partial.

    J'ai donc procédé comme suit :

    View - Test.cshtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for (int i = 0; i < ViewBag.EntryNumber; i++)
    {
         ViewBag.Index = i;
     
         if(Model == null)
         {
              Html.RenderPartial("_GodsonInfos");
         }
         else
         {
              Html.RenderPartial("_GodsonInfos", Model.Godsons[i]);
         }
    }
    Je passe désormais mon index et la liste de fonctions dans le ViewBag tout simplement

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 83
    Points
    83
    Par défaut
    Merci pour l'astuce !
    Découvrez DotnetDojo, pour booster vos compétences de développeur

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

Discussions similaires

  1. formulaire liste deroulante qui redirectionne
    Par gandoulfe dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2006, 18h16
  2. Formulaire/Liste déroulante
    Par sbeprod dans le forum Access
    Réponses: 1
    Dernier message: 05/11/2005, 15h31
  3. Réponses: 3
    Dernier message: 29/10/2005, 10h23
  4. Formulaire & liste déroulante
    Par Zebulonn dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/05/2005, 14h48
  5. [FORMULAIRE] Liste déroulante dynamique
    Par bchristo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/01/2005, 10h07

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