Tôi đã viết một loạt các điều khiển ASP.NET chung, và một điều tôi không thể có vẻ để quấn quanh tâm trí của tôi là khi lưu trữ các giá trị trong ViewState, và khi giả sử nó OK không.Làm thế nào để quyết định những gì để lưu trữ trong ViewState?
Một mặt, nó làm cho tinh thần để lưu trữ toàn bộ tình trạng kiểm soát trong ViewState, bao gồm cả tài sản như:
- giá trị hộp chữ nhập vào bởi người sử dụng (hoặc bất kỳ dữ liệu mẫu)
- tùy chọn cấu hình như chiều cao hoặc kích thước trang
- Ngay cả cách điều khiển đã được soạn - ví dụ như lưu trữ tất cả dữ liệu, chế độ xem lưới được tạo từ hoặc chính lưới đó.
Bỏ qua hiệu suất, bạn càng có thể đẩy mạnh trong chế độ xem tốt hơn, vì điều đó có nghĩa là điều khiển sẽ hoạt động chính xác trên postback và không bao giờ "vô tình" hoàn nguyên giá trị hoặc "quên" nó bị tắt. Nhưng ViewState không miễn phí. Lưu trữ tất cả mọi thứ có nghĩa là điều khiển bây giờ sẽ xuất ra cả HTML và tất cả các thuộc tính bên trong của nó để tạo ra HTML đó, mà hầu như luôn luôn tăng hơn gấp đôi đầu ra.
Câu hỏi của tôi không phải về hiệu suất, mà là về chiến lược. Tôi có quyết định đặt một tài sản nào trong ViewState? Tôi đã suy nghĩ điều gì đó dọc theo các dòng sau:
Nếu người dùng không thể thay đổi thuộc tính, thì máy chủ sẽ luôn đặt rõ ràng, vì vậy, bạn có thể để nó ở chế độ xem. Ngay cả đối với một cái gì đó như
color=red
, người dùng không trực tiếp đặt thuộc tính này; họ sẽ bấm vào một nút ở nơi khác mà gián tiếp đặt thuộc tính này. Nút đó hoặc chủ sở hữu của nó phải giữ trạng thái, chứ không phải nút điều khiển để hiển thị màu đỏ.
Logic này ngụ ý rằng các thuộc tính duy nhất mà nên đi vào ViewState sẽ là:
- yếu tố Form như
<input>
(và vớiRequest.Form[c.UniqueID]
này có thể tránh được vẫn) - Thuộc tính mà người dùng có thể kiểm soát tương tác trực tiếp trên điều khiển.
Logic này có hợp lý không? Nó có vẻ yếu và tôi muốn nghe nhiều hơn từ các chuyên gia.
Ngoài ra: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx thật thú vị – Patrick