Bonjour à tous,
Cela fait déjà quelques mois que je bosse sur en MVC 2 avec EntityFramework, et franchement j'adore. Mais il m'arrive d'avoir encore quelques soucis, comme celui-ci, je suis bloqué depuis 2 jours.
J'ai une vue contenant un formulaire, et un joli submit à la fin qui envoie les données vers la bonne action. Pas de soucis de ce côté là.
Le principe de cette page est censé être simple, on veut créer une nouvelle commande, mais, selon le type de commande sélectionner dans une liste déroulante, on affiche des groupes d'articles différents.
Ces articles sont censés être ajoutés (ainsi que le nombre désiré), alors que la commande n'est pas encore créée en DB. Une fois qu'on cliquerait sur "Enregistrer", la commande serait créée ainsi que tous ses articles.
Avant d'exposer le problème, voici un résumé de ma vue :
Lorsque la liste de "Types" est changée, l'action "LoadOrderItems" est appelée, ce qui va remplir le contenu du div "itemsPane". Tout ça fonctionne très bien et j'ai l'habitude de bosser comme ça. Ce qui est nouveau en revanche, c'est que ce contenu est censé être modifiable.
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 <% Html.EnableClientValidation(); %> <% using (Html.BeginForm("CreateNewOrder", "Order")) {%> <%: Html.ValidationSummary(true) %> [ plein de contrôles de saisie, puis : ] <td> <%: Html.Label("Type de la commande") %> </td> <td> <%: Html.DropDownList("TypeID", (ViewData["typesList"] as SelectList)) %> </td> <div id="itemsPane"> </div> <input type="submit" name="submitButton" value=" Enregistrer " /> $(function () { $('#TypeID).change(function (event) { $('#itemsPane).load('Service/LoadOrderItems', { orderID: $("#OrderID").val(), typeID: ("#TypeID").val() }); }); });
Une fois l'affichage des articles (items) terminé (en moyen d'une boucle sur le Model envoyé à la PartialView), j'ai :
Ceci afin de choisir un article dans une liste déroulante (ItemID), d'indiquer le nombre désiré (ItemsNumber initialisé à 1), pour ensuite cliquer sur un bouton "Ajouter".
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 <% if (Model == null || Model.Count < 5) { %> <tr> <td> <%: Html.DropDownList("ItemID", (ViewData["itemsList"] as SelectList))%> </td> <td> <%: Html.TextBox("ItemsNumber", 1) %> </td> <td> <input type="submit" name="submitButton" value=" Ajouter " /> </td> </tr> <% } %> </table>
Ce "bouton" pourrait tout aussi bien être un ActionLink, mais je n'arrive à rien pour le moment.
En résumé donc : Que puis-je faire pour gérer cette liste d'articles en évitant des bêtes POST (comme j'ai essayé de faire ci-dessus) alors que l'objet "Order" n'est pas encore créé.
Bien entendu la structure de données est déjà prévue pour le faire : "Order" contient bien une liste d'objets "OrderItems".
Je n'ai peut-être pas très bien expliqué mon problème (je suis un peu sur les nerfs depuis deux jours à cause de ça), n'hésitez pas à me demander plus d'info si je n'ai pas été clair.
D'avance merci à vous !
Slicta.
Partager