J'ai un projet utilisant ASP.NET MVC & EF5. Le modèle dispose d'un nombre assez important de champs que l'application aura besoin de plusieurs pages pour collecter toutes les données. p>
Une fois les données collectées, il est soumis à un service Web / Webapi. (Cela ne peut pas être changé ou j'utiliserais des entités EF à la place). P>
Quelle est la meilleure suggestion pratique ou meilleure pour persister le modèle de données de page à la page à la page qu'elle est remplie? P>
3 Réponses :
Vous pouvez créer une classe ViewModel que chaque page utilise (vue fortement tapé) et stocker simplement les champs qui ne sont pas édités dans des champs cachés. Votre contrôleur aurait une méthode d'action et une vue pour chaque étape. Lorsque chaque étape est soumise, vous renvoyez la vue (avec le modèle de vue) pour la prochaine étape.
sur la dernière page, vous soumettez le modèle de vue et enregistrez-le. P>
Code de contrôle: P>
[HttpPost] public ActionResult Step1(MyBigViewModel model) { //do work return View("Step2", model); } [HttpPost] public ActionResult Step2(MyBigViewModel model) { //do work return View("Step3", model); } [HttpPost] public ActionResult Step3(MyBigViewModel model) { //save here return View("Success", model); }
Bonjour @rob, c'est il y a quelques mois, mais je ne pouvais pas obtenir votre première réponse ci-dessus pour travailler. Chaque fois que le formulaire sur la vue "Step2" est soumis, il revient à la méthode httpPost pour Step1. L'URL reste comme {contrôleur} \ Step1.
Est-ce un modèle de conception reconnu? N'est-ce pas un peu "bizarre"? Est-ce la meilleure pratique?
Pourquoi ne puis-je pas utiliser le modèle de domaine code> code> directement interagir avec la vue ou pourquoi
Impossible de créer un modèle Disons que vous avez 50 champs de votre classe. J'ai mis en place annotations de données em> les champs requis em> sont également présents. d'accord. Je suis à l'étape 1. J'ai soumis le formulaire. Ma méthode post-action em> dit, forme ne peut pas être soumise !!!! Pourquoi ??? p> C'est parce qu'il y a des champs obligatoires em> qui ne sont pas la partie de l'étape 1. J'ai une question de votre part. Voulez-vous garder toutes les propriétés question - 2 strong> p> Quelle est la meilleure suggestion pratique ou meilleure pour persister les données
Modèle de la page à la page car il est rempli? p>
blockQuote> à l'aide de
Modèle code> et transmettez tous les propriétés code> de
modèle de domaine code>? p>
blockQuote>
code> comme mention dans une autre réponse?
Si vous souhaitez ajouter toutes les propriétés dans un
Modèle de vue code>, alors pourquoi une interaction avec
Modèle de domaine directement selon la suggestion fournie dans une autre réponse? Ainsi, l'ajout de toutes les propriétés dans un modèle de vue sera pire. Droite? P>
Fortement des types de vue code>, une fois que les données sont envoyées à Méthode Post Action Code> Après mes connaissances, vous pouvez utiliser
TEMPDATA CODE> pour stocker les données publiées. C'est comme une classe
DigneAreader code>, une fois lu, les données seront perdues. Donc, ces données stockées dans
tempdata code> deviennent nulle après avoir lu. P>
How will you handle the case when you have both Next and Previous Buttons?
Je suis tombé sur cet article, qui était très informatif et m'a aidé: https://blacklineit.com / 2015/10/14 / roulement-votre-propriétaire-Viewstate-in-asp-net-mvc / p>
Fondamentalement, l'article revient à ce sujet: "Le moyen le plus facile et le plus propre que j'ai trouvé de persister les données entre les pages consiste à utiliser la grande bibliothèque de Newtonsoft JSON pour sérialiser ViewModel dans un seul champ masqué et désériorialiser sur les demandes postales." p>
Lisez-le pour obtenir l'arrière-plan et les informations supplémentaires. P>
Laissez-moi simplement signaler une soie de projet (une partie d'un modèle et des pratiques) disponibles à Silk.codeplex.com a>