27 votes

ViewState est-il pertinent dans ASP.NET MVC ?

J’apprends ASP.NET MVC et de nombreux concepts de "ASP.NET" comme l’authentification, l’autorisation, l’état de session s’appliquent encore à elle.

Mais de tout ce que j’ai compris peu, je ne vois pas que ViewState est toujours pertinent dans une demande ASP.NET. Mais il est là (propriété de System.Web.Mvc.ViewPage)! Est-il seulement pour des raisons de compatibilité ou il a encore un but / utilisation?

8voto

Dzmitry Huba Points 3333

Oui, c’est exact. ViewState n’est pas pertinent. Pour en savoir plus sur les différences entre Page Model et MVC, cliquez ici :

Compatibilité des formulaires Web ASP.NET et de ASP.NET MVC

6voto

AnthonyWJones Points 122520

Son présent parce que ViewPage hérite de Page. Toutefois, Page elle-même n’avait aucune utilité pour ViewState son utilisé par WebControls. Il est possible d’inclure WebControls d’origine dans une vue, mais ce serait complètement manquer le point de séparer le contrôle de la vue.

3voto

Adam Tuliper - MSFT Points 22478

L'état d'affichage n'est pas pertinent, cependant il donné une très grande fonctionnalité. Nous n'avons pas eu à recharger les données à chaque fois, ou de se soucier de la mise en cache de chaque élément, etc. ViewState également fourni une partie de la sécurité - il empêché une certaine forme de falsification. Si vous lié à une zone de liste déroulante, il empêche les gens de jouer avec les valeurs que celles qui ont été comparés aux haché viewstate et ne permettrait pas de validation, si elle a été sali avec. À cette fin, l'état d'affichage était très agréable. Le problème, c'est qu'il a obtenu de très gros sur la plupart des pages que les gens ne s'éteint pas viewstate pour ce qu'ils n'ont pas besoin de cela pour.

Ok - comment résoudre ce problème? Le MVC Terme de projet de Microsoft contient le code Html.Méthode Serialize et en collaboration avec l' [Désérialiser] attribut comme un paramètre de méthode cette condition très fine de contrôle sur "l'état d'affichage' - c'est à dire la sérialisation.

ex. dans le contrôleur:

[HttpGet]
 public ActionResult Index()
{
 OrderRepository référentiel = new OrderRepository();
 var shipTypes = référentiel.GetAllShipTypes();
 var commandes = référentiel.GetAllOrders();
 ViewBag.ShipTypes = shipTypes;
 de retour de Vue(commandes.First());
}

[HttpPost]
 public ActionResult Index(de l'Ordre de l'ordre, [Désérialiser] Liste<ShipType> shipTypes)
{
 //Notez l'ordre.ShipTypeId est rempli.
 ViewBag.ShipTypes = shipTypes;
 retour Afficher();
}

et dans la Vue j'ai le sérialiser et à l'utiliser dans un combo

@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
 @Html.DropDownList("ShipTypeId", ((Liste)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })



2voto

eyesnz Points 2068

Personnellement, je pense que son obsolète. La seule fois où j’ai vu ViewState dans une application MVC ASP.Net, c’est quand quelqu’un «accidentellement» a ajouté un contrôle ASP.Net à une page.

0voto

jan salawa Points 1058

Si vous avez besoin, vous pouvez imiter l’état de vue avec le projet MVC3Futures. Il vous permettra d’enregistrer l’ensemble du modèle en vue.

Tout ce que vous avez à faire est de sérialiser le modèle et le chiffrer en vue.

Et dans le contrôleur ajouter attribut deserialized.

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