Bonjour,

Je rencontre un souci lors d'un POST vers l'action de mon contrôleur.

J'ai donc :
Une vue partielle utilisant un modèle de type "List<MonObjet>", et à l'intérieur, une itération sur ce modèle.

Le modèle "MonObjet" possède une vue "MonObject.cshtml" dans le "~/Shared/EditorTemplates" afin que je puisse, depuis ma première vue partielle faire un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@Html.EditorFor(x => x)
Ou avec une itération en "for()"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@Html.Editor(x => x[i])
Ca tourne sur le rendu, pas de problème.

Passons à la vue typée "MonObjet" :
Elle contient un formulaire HTML déclaré comme cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
@Html.BeginForm("MonAction", "MonCtrl", FormMethod.Post, new { @id = "form-[id-unique-mon-objet]"})
En fin de form, j'ai placé un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<button type="submit" />
Au rendu, l'ensemble de mes champs de formulaire sont bien bindés correctement avec une notation comme celle-ci :
Etant donné que mes champs sont bindés en mode "list", mais que je submit le formulaire "individuellement", c'est là que je rencontre des soucis. Pour que mon controller réceptionne correctement les données, je le déclare non pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Public ActionResult MonAction(MonObject obj)
Mais comme ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Public ActionResult MonAction(List<MonObject> obj)
Quand je traite le premier élément de ma page (renseignement du form + validation submit), pas de souci, ma liste comporte bien un seul élément, je fais alors
Pour obtenir mes données postées.

Quand je tente de traiter un autre élément que le premier, mon modèle envoyé est null.

Le problème vient alors du fait que l'objet envoyé est serialisé comme cela :
[x].Propriete&[x].AutreProp ...

Alors que le premier élément est bien :
[0].Propriete&[0].AutreProp ...

J'ai bien l'impression que le controlleur n'arrive pas à interpréter cela comme une liste étant donné qu'il "manque" des données (omission des index de [0] a [x-1] dans la serialisation des données de formulaire).

Mais du coup, comment je peux avoir une liste de formulaire "identiques" (même modèle) avec pour chacun, une validation individuelle ?

Je précise aussi que j'ai une fonction JS pour le post de données avec ceci (le tout pour gérer la réponse asynchrone / loading de chargement ... etc)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(document).submit(function(e) {
e.preventDefault()
Post(this)
});
 
function Post(form) {
...
 $.ajax({
        async: true,
        url: $(form).attr('action'),
        type: $(form).attr('method'),
        data: $(form).serialize(),
...
});
}