ViewState không liên quan, tuy nhiên nó cung cấp một số chức năng tuyệt vời. Chúng tôi không phải tải lại dữ liệu mỗi lần hoặc lo lắng về việc lưu vào bộ nhớ cache từng mục, v.v. ViewState cũng cung cấp một số bảo mật - nó ngăn cản một mức độ nhất định của biểu mẫu giả mạo. Nếu bạn bị ràng buộc một hộp kết hợp, nó ngăn chặn mọi người từ không quan trọng với các giá trị như những người đã được so sánh với các viewstate băm và sẽ không xác nhận nếu nó đã được điều sai. Để kết thúc này ViewState là khá tốt đẹp. Vấn đề là nó rất lớn trên hầu hết các trang vì mọi người không tắt chế độ xem cho những gì họ không cần.
Ok - cách giải quyết vấn đề này? Dự án MVC Futures của Microsoft chứa phương thức Html.Serialize và kết hợp với thuộc tính [Deserialize] như một tham số phương thức, điều này cung cấp khả năng kiểm soát hạt rất tốt đối với 'viewstate' - tức là tuần tự hóa.
ví dụ: trong bộ điều khiển:
[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();
}
và trong Xem Tôi serialize nó và CŨNG sử dụng nó trong một combo
@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
@Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })
Nguồn
2011-04-24 18:01:56
Loại câu hỏi này tôi thấy rất hữu ích. Tôi không sử dụng ASP.NET MVC ngay bây giờ bởi vì tôi hiện không làm công cụ web ở tất cả, nhưng tôi vẫn muốn biết về nó vì vậy tôi có thể nhặt nó lên nhanh hơn khi tôi đang sử dụng nó. – NeedHack
Liên quan đến http://stackoverflow.com/a/2230635/52277 –