.net asp.net asp.net-mvc viewstate

¿Es relevante ViewState en ASP.NET MVC?



asp.net-mvc (5)

Personalmente creo que es obsoleto. La única vez que he visto ViewState en una aplicación MVC de ASP.Net es cuando alguien ''accidentalmente'' agregó un control ASP.Net a una página.

Estoy aprendiendo ASP.NET MVC y muchos conceptos de "ASP.NET" como autenticación, autorización, estado de sesión todavía se aplican a él.

Pero por lo poco que he entendido, no veo que ViewState siga siendo relevante en una aplicación ASP.NET. Pero está ahí (propiedad de System.Web.Mvc.ViewPage)! ¿Está ahí solo por razones de compatibilidad o todavía tiene algún propósito / uso?


Si lo necesita, puede imitar el estado de la vista con el proyecto MVC3Futures . Te permitirá guardar todo el modelo a la vista.

Todo lo que tienes que hacer es serializar el modelo y cifrarlo a la vista.

@Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)

Y en el controlador agregar atributo deserializado.

public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)



Su presente porque ViewPage hereda de la página. Sin embargo, la página en sí no tenía ningún uso para ViewState, ya que WebControls lo usaba. Es posible incluir WebControls originales en una vista, pero al hacerlo se perdería completamente el punto de separar el control de la vista.


ViewState no es relevante, sin embargo, proporcionó una gran funcionalidad. No teníamos que recargar datos cada vez, o preocuparnos por el almacenamiento en caché de cada elemento, etc. ViewState también brindaba algo de seguridad: evitaba cierto grado de manipulación de formularios. Si vinculaba un cuadro combinado, evitaba que las personas manipularan los valores, ya que se compararon con el estado de visualización hash y fallaría la validación si se ensuciaba. Para este fin ViewState fue bastante agradable. El problema es que se hizo muy grande en la mayoría de las páginas, ya que las personas no apagaron ViewState por lo que no necesitaban.

Ok - ¿Cómo resolver esto? El proyecto MVC Futures de Microsoft contiene el método Html.Serialize y, junto con el atributo [Deserialize] como parámetro del método, proporcionó un control muy preciso sobre ''viewstate'', es decir, la serialización.

ex. en el controlador:

[HttpGet] public ActionResult Index() { OrderRepository repository = new OrderRepository(); var shipTypes = repository.GetAllShipTypes(); var orders = repository.GetAllOrders(); ViewBag.ShipTypes = shipTypes; return View(orders.First()); } [HttpPost] public ActionResult Index(Order order, [Deserialize] List<ShipType> shipTypes) { //Note order.ShipTypeId is populated. ViewBag.ShipTypes = shipTypes; return View(); }

y en la Vista lo serializo y TAMBIÉN lo uso en un combo

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