ViewState no es relevante, sin embargo, proporcionó una gran funcionalidad. No tuvimos que volver a cargar datos cada vez, ni preocuparnos por el almacenamiento en caché de cada elemento, etc. ViewState también proporcionó algo de seguridad, evitando un cierto grado de alteración de forma. Si enlazó un cuadro combinado, impidió que las personas juguetearan con los valores ya que se compararon con el estado de visualización con hash y no se validaría si se cometió un error. 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 desactivaron ViewState para 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 de método, proporciona un control muy detallado sobre 'viewstate', es decir, 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 de lo serializarlo y también lo utilizan en un combo
@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
@Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })
Este tipo de pregunta me resulta muy útil. No estoy usando ASP.NET MVC en este momento porque en este momento no estoy haciendo nada en la web, pero aún así quiero saberlo para poder recuperarlo más rápido cuando lo estoy usando. – NeedHack
Relacionado con http://stackoverflow.com/a/2230635/52277 –