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 :
Puis je l'ai scindé en deux objets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Pour ensuite passer comme modèle à ma vue cet objet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
j'ai ensuite affiché le modèle comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>(); } }
Ce qui donne comme UI : (Ne pas faire attention au design c'est juste un test
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
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> })
Je souhaite ensuite récupérer les valeurs du formulaire dans cette méthode :
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [HttpPost] public ActionResult Test(Mix obj) { return View(); }
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![]()
Partager