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