8
votes

Meilleure pratique pour une application Web multipage / formulaire MVC

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.

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).

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?


1 commentaires

Laissez-moi simplement signaler une soie de projet (une partie d'un modèle et des pratiques) disponibles à Silk.codeplex.com


3 Réponses :


12
votes

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);
}


2 commentaires

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?



11
votes

question - 1 strong>

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 Modèle code> et transmettez tous les propriétés code> de modèle de domaine code>? p> blockQuote>

réponse strong> p>

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 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>

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>

réponse strong> p> xxx pré>

à l'aide de 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?


0 commentaires

0
votes

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 /

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."

Lisez-le pour obtenir l'arrière-plan et les informations supplémentaires.


0 commentaires