ViewState не имеет отношения к делу, однако он обеспечивает отличную функциональность. Нам не приходилось каждый раз перезагружать данные или беспокоиться о кешировании каждого элемента и т. Д. ViewState также обеспечивала некоторую безопасность - это предотвращало определенную степень вмешательства в форму. Если вы связали поле со списком, это заставило людей перебирать значения, поскольку они были сопоставлены с хеш-представлением и не подтвердили правильность, если он был запутан. Для этого ViewState был довольно приятным. Проблема в том, что на большинстве страниц он очень большой, так как люди не отключили viewstate для того, за что им это не нужно.
Хорошо - как это решить? Проект MVC Futures от Microsoft содержит метод Html.Serialize и в сочетании с атрибутом [Deserialize] в качестве параметра метода, который обеспечивает очень тонкий контроль над «viewstate», то есть сериализацию.
ex. в контроллере:
[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();
}
и в представлении я сериализовать его, а также использовать его в комбо
@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
@Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })
Этот вопрос я считаю очень полезным. Я не использую ASP.NET MVC прямо сейчас, потому что сейчас я вообще не занимаюсь веб-сайтом, но я все еще хочу знать об этом, чтобы быстрее его использовать, когда я его использую. – NeedHack
Связано с http://stackoverflow.com/a/2230635/52277 –