ViewState non è rilevante, tuttavia ha fornito alcune grandi funzionalità. Non abbiamo dovuto ricaricare i dati ogni volta, né preoccuparci di mettere in cache ogni elemento, ecc. ViewState ha anche fornito un po 'di sicurezza - ha impedito un certo grado di manomissione dei moduli. Se hai associato una casella combinata, ha impedito alle persone di giocherellare con i valori come se fossero confrontati con il viewstate con hash e non avrebbero esito positivo la convalida se fosse stata modificata. A tal fine ViewState è stato abbastanza carino. Il problema è che è diventato molto grande nella maggior parte delle pagine in quanto le persone non hanno disattivato il viewstate per ciò di cui non avevano bisogno.
Ok - come risolvere questo? Il progetto MVC Futures di Microsoft contiene il metodo Html.Serialize e in combinazione con l'attributo [Deserialize] come parametro del metodo, questo ha fornito un controllo molto dettagliato su 'viewstate', ad esempio la serializzazione.
ex. nel controller:
[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();
}
e nella vista ho serializzare e utilizzarlo anche in un combo
@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
@Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })
fonte
2011-04-24 18:01:56
Questo tipo di domanda lo trovo molto utile. Non sto usando ASP.NET MVC in questo momento perché attualmente non sto facendo nulla per il web, ma voglio ancora saperlo, così posso prenderlo più rapidamente quando lo sto usando. – NeedHack
correlati a http://stackoverflow.com/a/2230635/52277 –