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:
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:
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:
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:
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:
1 2 3 4 5 6
|
[HttpPost]
public ActionResult CreateSponsorship(GodsonsViewModel godsonsViewModels)
{
return View();
} |