ViewState ist nicht relevant, bietet jedoch einige großartige Funktionen. Wir mussten die Daten nicht jedes Mal neu laden oder uns um die Zwischenspeicherung jedes Elements usw. kümmern. ViewState bot auch einige Sicherheit - es verhinderte ein gewisses Maß an Manipulation der Form. Wenn Sie ein Kombinationsfeld begrenzen, werden die Leute daran gehindert, mit den Werten zu experimentieren, die mit dem Hash-View-Status verglichen wurden, und die Validierung würde fehlschlagen, wenn sie durcheinander gebracht würde. Zu diesem Zweck war ViewState ziemlich nett. Das Problem ist, dass es auf den meisten Seiten sehr groß wurde, da die Leute den Viewstatus nicht ausgeschaltet haben, wofür sie ihn nicht brauchten.
Ok - wie löst man das? Das MVC-Futures-Projekt von Microsoft enthält die Html.Serialize-Methode und in Verbindung mit dem [Deserialize] -Attribut als Methodenparameter bot dies eine sehr feine Kontrolle über 'Viewstate' - dh Serialisierung.
ex. in der Steuerung:
[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();
}
und in der Ansicht ich es serialisiert werden und es auch in einer Combo
@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
@Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })
Diese Art von Frage finde ich sehr nützlich. Ich benutze momentan kein ASP.NET MVC, weil ich momentan keine Web-Sachen mache, aber ich möchte immer noch etwas darüber wissen, damit ich es schneller aufnehmen kann, wenn ich es benutze. – NeedHack
Bezogen auf http://StackOverflow.com/a/2230635/52277 –