1 pièce(s) jointe(s)
Httppost d'un modèle avec une liste.
Bonjour,
J'ai besoin pour l'une des pages de mon site web de mettre en place un formulaire un peu spécifique. Le formulaire sur est composé d'une en-tête, et d'un tableau avec plusieurs lignes. L'utilisateur renseigne l'en-tête, puis les lignes du tableau avec des valeurs différentes. Ce que je souhaite obtenir en httppost est un objet composé de l’en-tête et d'une liste avec toutes les entrées saisies dans le tableau ou une collection d'objets qui ont en commun seulement l'en-tête et une ligne du tableau.
J'ai essayé de traduire ceci en modèle, mais je n'obtient pas ce que je souhaite lors du submit du formulaire et peut-être que je fais fausse route.
Voici ce que j'ai essayé.
Un modèle objet total avec toutes les propriétés :
Code:
1 2 3 4 5 6 7 8
| public class ObjetTotal
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Numero { get; set; }
public string Value { get; set; }
} |
Puis je l'ai scindé en deux objets :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| public class MainObjet
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Numbers
{
public string Numero { get; set; }
public string Value { get; set; }
} |
Pour ensuite passer comme modèle à ma vue cet objet :
Code:
1 2 3 4 5 6 7 8 9 10 11
| public class Mix
{
public MainObjet obj { get; set; }
public List<Numbers> num { get; set; }
public Mix()
{
obj = new MainObjet();
num = new List<Numbers>();
}
} |
j'ai ensuite affiché le modèle comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| @model App.Models.Mix
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Mix</legend>
<h3>First Properties</h3>
<div>
@Html.TextBoxFor(model => model.obj.Id);
@Html.TextBoxFor(model => model.obj.Name);
@Html.TextBoxFor(model => model.obj.Description);
</div>
<div>
<table>
@for (int i = 0; i < 5; i++)
{
<tr>
<td>
@Html.TextBoxFor(model => model.num[i].Numero)
</td>
<td>
@Html.TextBoxFor(model => model.num[i].Value)
</td>
</tr>
}
</table>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
} |
Ce qui donne comme UI : (Ne pas faire attention au design c'est juste un test :mrgreen:)
Pièce jointe 337979
Je souhaite ensuite récupérer les valeurs du formulaire dans cette méthode :
Code:
1 2 3 4 5
| [HttpPost]
public ActionResult Test(Mix obj)
{
return View();
} |
Mais j'obtiens un objet vide en retour, et je ne comprends pas pourquoi.... Je ne sais pas si la façon dont je veux afficher mon formulaire est une bonne pratique... :aie:
Avez-vous une idée pour afficher ce formulaire et récupérer les données en httppost ?
Je suis toujours en recherche, j'ai vu qu'il y avait moyen de passer par deux objets différent et des partials view, je vais tenter cette solution également !
Merci :P