Hãy nhớ lại, tuy nhiên, một số hành vi nhất định được mong đợi bởi hầu hết các nhà phát triển biểu mẫu web ASP.NET sẽ không hoạt động nếu không có ViewState. Mục đích của ViewState là cung cấp cho ảo giác rằng các thuộc tính trang và kiểm soát khác nhau tồn tại từ yêu cầu này đến yêu cầu tiếp theo. ViewState không chứa tất cả các thuộc tính điều khiển, chỉ những thuộc tính đã thay đổi. Ý tưởng là ViewState giữ lại các thuộc tính này khi chúng ở thời điểm biểu mẫu được hiển thị lần cuối.
Một ví dụ điển hình là sự kiện SelectedIndexChanged
trên menu thả xuống (một trong đó không có bộ tự động khởi động lại). Điều này làm việc vì ViewState giữ lại chỉ mục trước đó và biểu mẫu đăng chỉ mục hiện tại và điều khiển so sánh hai chỉ mục để biết rằng chỉ mục đã chọn đã thay đổi. Đó là khi nó tăng sự kiện SelectedIndexChanged
. Nếu không có ViewState, sự kiện đó sẽ không kích hoạt. Tương tự cho các sự kiện TextChanged
, v.v.
Thiếu tình huống GET (mà tôi chưa bao giờ gặp phải), vấn đề lớn với ViewState là sử dụng nó khi không cần thiết. Điều khiển lưới của bạn không cần phải giữ lại các giá trị trước đó của tất cả các điều khiển trong tất cả các hàng của nó, do đó, không bật ViewState trên đó.
Nguồn
2009-03-15 10:40:12
@TFD: Trong khi điều đó chắc chắn xảy ra đôi khi, tôi không tin rằng đó là trường hợp ở đây. Sử dụng các biểu mẫu với runat = "server" cùng với các hành động GET (thay vì POST) dẫn đến chính xác loại hành vi mà người hỏi không muốn. Câu trả lời của tôi không liên quan như thế nào? –
@TFD Jon đã đúng, bạn có thể muốn kiểm tra các liên kết mà anh ấy đăng trước khi công khai như thế;) – eglasius
GET có thể không phù hợp khi bạn thực sự muốn xem - nhưng nó rất hữu ích khi bạn * không * cần viewstate. Đặc biệt, việc đánh dấu một URL với các tham số GET sẽ dễ dàng hơn rất nhiều so với việc phân loại bài đăng trở lại viewstate :) –