52 votes

asp.net c # MVC: Comment vivre sans ViewState?

Je cherche juste à convertir WebForms en MVC:

Dans .net MVC, quels concepts font de ViewState quelque chose qui n’est pas nécessaire?

Si un formulaire est posté sur lui-même, etc. (c.-à-d. Une publication)? Comment la page / usercontrol conserve-t-elle son état?

Quelles astuces les gens font-ils pour maintenir un état quelconque et ne pas recourir à l'état de session?

Un environnement totalement apatride ne peut-il exister?

79voto

Will Points 76760

Mais il peut bien sûr. En fait, le web est apatride. Toutes les pensées contraires de l'aberration, en fait.

Les Contrôles Web sont allés dans MVC. Il n'y a pas d'événements de tir sur le côté serveur. Il est remplacé par deux mécanismes différents--Url et l'Affichage des données de formulaire. La bonne utilisation de ces remplacera votre besoin pour le ViewState.

Dans un classique ASP.NET application web, vous pouvez placer un LinkButton sur votre page web qui permettrait d'effectuer la fonction de X. ASP.NET en tiendrais beaucoup de ViewState trucs, javascript et d'autres choses dans la page web de sorte que, lorsque l'utilisateur clique sur le bouton et "postes" au site web (par l'envoi d'un formulaire, personne ne sait existé), ASP.NET reconstitue ce qui s'est passé et détermine un bouton particulier gestionnaire d'événement doit être exécutée.

Dans MVC, vous construisez votre lien d'accès à une route particulière. L'itinéraire décrit ce que l'utilisateur le souhaite--/Utilisateurs/Souffrance/Index (afficher une liste de tous les utilisateurs). Le système de routage en MVC détermine le Contrôleur va gérer cette route et de la méthode sur le contrôleur à exécuter. Toute information supplémentaire peut être transmis au contrôleur par la méthode de chaîne de requête d'URL (valeurs?Page=5 pour la 5ème page de délinquants).

En plus des Url, vous pouvez utiliser les formulaires HTML de publier des informations plus complexes (comme un formulaire de données) ou des choses qui ne rentrent pas dans une chaîne de requête, tel qu'un fichier.

Si vous de "maintien" de l'état via les chaînes de requête et de la forme de valeurs POST. Vous trouverez que, en fait, il n'y a pas que beaucoup de l'état de maintenir à la fin. En fait, avoir à maintenir des lots de l'etat est une bonne indication que votre conception est manquant ou que vous essayez de faire quelque chose qui ne convient pas à un modèle de site web.

12voto

Nathan Taylor Points 13582

Certaines questions connexes:


Dans la plupart des web traditionnel langues la notion de dynamique de l'environnement est en fait assez rare. ASP.NET Webforms est une exception à la règle et il se crée cette exception en réinventant beaucoup de normes. L'objectif derrière Webforms est essentiellement abstraite de la notion de HTML et de développement web en général, de sorte que la ligne entre l'application de bureau et d'applications web de flou dans l'optique du développement. Ce que cela tend généralement à dire, c'est que la solution que ASP.NET Webforms fournit, bien qu'efficace, n'est pas un jack-of-all-trades de mise en œuvre qui en résulte certains très documenté qui fonctionne assez bien pour satisfaire la plupart. À l'inverse, l'avantage fondamental de ASP.NET MVC est qu'il donne à la sortie HTML de contrôle aux développeurs et leur permet de créer fortement structuré, Reposant applications web qui sont mieux définis et plus propre dans leur mise en œuvre et de la présentation - en dépit de sacrifier un peu de confort d'utilisation.

Sans doute, l'un des plus grands inconvénients de la Webforms modèle est le ViewState, car il encombre la sortie, augmente la taille de la page de façon spectaculaire dans certains scénarios, et il est souvent l'équivalent de l'aide d'un marteau-piqueur à accrocher un tableau. Plutôt que d'essayer de rendre l'utilisation de l'état d'affichage dans votre application MVC (ou quelque chose ressemblant à ça), vous devriez commencer à utiliser des modèles permettant de contrôler explicitement les champs de vos formulaires et d'optimiser votre entrée et de sortie des opérations avec seulement les données les plus pertinentes. En plus des changements dans le balisage, vous apprendrez aussi à mieux construire ses solutions qui peuvent être exposés au sein de votre application et à l'externe.

Le numéro un de la comparaison que je voudrais faire est simplement: Webforms construit des Pages Web, mais MVC construit des Applications Web. Si votre journée-à-jour de travail est principalement la construction des morceaux d'un site web, ou en ajoutant des petits morceaux de fonctionnalités, vous trouverez souvent des Webforms à être beaucoup plus facile et moins de temps; d'autre part, si vous voulez construire une application complète qui est vérifiable, évolutive et flexible, MVC est votre vocation.

9voto

Rob Fonseca-Ensor Points 11697

viewstate est juste un grand champ de formulaire caché.

Ecrivez vos propres champs de formulaire cachés et chiffrez-les si nécessaire.

Heureusement, il n’existe plus de moyen simple de transférer des tas de données dans la page, vous devez donc être judicieux quant à ce que vous souhaitez enregistrer.

4voto

Robert Harvey Points 103562

Si un formulaire est affiché en arrière sur lui-même, etc (c'est à dire un postback)? comment l' page/usercontrol maintenir son état? Les tours font les gens à maintenir une sorte d'etat et de ne pas recourir à l'état de session?

Posté ViewData (ou fortement typées objet lié à la page) peut être poussé à l'afficher de nouveau. Voir "l'Intégration de la Validation et des Affaires de la Règle Logique avec le Modèle de Classes" dans cette page. Il montre comment vous pouvez poster un formulaire, validez, et de renvoyer les champs vers le formulaire si une erreur se produit.

Dans .net MVC, quels concepts ViewState quelque chose qui n'est pas requis?

REST (Representational State Transfer).

3voto

Mark Brittingham Points 18970

MVC a certains avantages par rapport à WebForms, mais il a aussi quelques inconvénients ainsi que j'ai couvert en détail dans cette réponse. Je pense que la question fondamentale que vous devez vous poser est de savoir si l'état d'affichage est un problème pour vous maintenant - et est-ce un problème que vous devez réécrire votre application? Si non, alors l'Apprentissage MVC est un objectif digne d'intérêt (il est vraiment très cool), mais pas celui que j'avais des risques d'affaires.

Avec cela étant dit, l'état d'affichage peut effectivement être désactivé dans un nombre surprenant de cas. Il est principalement utilisé pour persister la valeur de contrôles par le biais d'un post-retour. Ainsi, par exemple, si vous avez une zone de texte dont la valeur, vous devez vérifier sur le côté serveur ainsi qu'un tas d'autres domaines, l'état d'affichage vous permettra de gérer l'après-back, de capture de l'erreur (et de leur montrer l'étiquette) et de retourner ensuite à l'utilisateur de la forme avec l'ensemble de leurs entrées intacte. Toutefois, si un formulaire est seulement va être rempli et retourné et vous serez alors rediriger vers une autre page, vous pouvez désactiver en toute sécurité.

Enfin, vous vous demandez ce que font les gens pour éviter l'état de la Session. Est-il une raison pour éviter l'état de session? Vous ne voulez sûrement pas beaucoup d'informations là, mais en évitant tout n'est pas vraiment nécessaire et, en fait, vous coûtera un des outils les plus puissants dans votre arsenal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X