Chế độ xem được lưu trữ trong thẻ ẩn <input />
trên biểu mẫu. Khi người dùng bắt đầu một postback (bằng cách nhấn vào một nút, ví dụ), dữ liệu được trả về cho máy chủ như là một phần của dữ liệu biểu mẫu.
Nếu bạn lưu trữ lượng lớn dữ liệu trong ViewState, bạn sẽ bị phạt cả khi người dùng cố tải xuống trang (vì tất cả dữ liệu đó sẽ là một phần của HTML) và khi người dùng cố gắng gửi biểu mẫu (vì tất cả dữ liệu đó phải được tải lên máy chủ).
Ngoài ra, ViewState dễ bị mất. Nó chỉ được duy trì miễn là người dùng gửi biểu mẫu. Nếu người dùng nhấp vào một siêu liên kết đến một trang khác, biểu mẫu sẽ không bao giờ được gửi và tất cả dữ liệu chứa trong ViewState sẽ bị mất. Điều này đúng ngay cả khi thẻ neo trỏ trở lại trang mà người dùng hiện đang truy cập.
Tôi thấy từ số previous question của bạn rằng bạn đang cố gắng tìm một nơi tốt để đặt DataTables của mình. ViewState không phải là nơi tồi tệ nhất miễn là dữ liệu tương đối nhỏ. Base64 là tốt hơn so với XML về sử dụng bộ nhớ nhưng nó vẫn còn là một chặng đường dài từ hiệu quả. Nếu dữ liệu khá tĩnh, bạn có thể cân nhắc lưu trữ dữ liệu trong số ApplicationState. Nếu bạn đang chỉnh sửa DataTable với GridView, thì GridView thực sự đã lưu trữ DataTable cho bạn mà bạn có thể truy cập thông qua thuộc tính DataSource (chỉ cần đưa nó trở lại một DataTable).
Nó cũng đáng chú ý là trong khi dữ liệu ViewState được mã hóa trong base64 (có nghĩa là người dùng bình thường sẽ không thể hiểu được nó), nó có thể dễ dàng thay đổi nội dung bởi một người dùng xác định. Dường như dữ liệu vô hại có thể được chỉnh sửa để trở nên khá có hại cho trang web của bạn. Đây là một con đường cổ điển để hack một trang web, vì vậy bạn phải rất cẩn thận về những dữ liệu, chính xác, bạn đang lưu trữ. Ví dụ: nếu bạn lưu trữ ID của người dùng trong ViewState, người dùng có thể chỉnh sửa ID và xâm nhập vào tài khoản của người dùng khác. (Lưu ý: đây chỉ là một vấn đề nếu EnableViewStateMac đã được thiết lập để False
.)
Người bỏ phiếu - nếu bạn không để lại nhận xét, OP sẽ không bao giờ tìm hiểu cách đặt câu hỏi hay hơn. Cá nhân, tôi thấy không có vấn đề với câu hỏi này. Tôi tin rằng nó rất hữu ích cho cộng đồng, vì vậy tôi đang thêm +1 để cân bằng mọi thứ. – JDB
@ Cyborgx37 Thế giới là một nơi tốt hơn để sống vì những người như bạn. Tôi khá mới mẻ với công nghệ này và tôi đang cố gắng tìm hiểu và loại bỏ những nhầm lẫn của mình. Đó là lý do tại sao tôi hỏi những câu hỏi như thế này. Nhưng một số Downvoters nghĩ rằng những gì được biết đến với họ được mọi người biết và không ai nên hỏi những câu hỏi đó. Nó nhắc tôi một câu tục ngữ Trung Quốc "Người hỏi một câu hỏi là một kẻ ngốc trong năm phút, người không hỏi một câu hỏi vẫn là một kẻ ngốc mãi mãi". Lolz –
Cảm ơn, nhưng thực sự là một tiêu chuẩn để đánh giá các câu hỏi hay/xấu - nghĩa là không phải tất cả các câu hỏi trên StackOverflow đều được chào đón (xem http://stackoverflow.com/questions/how-to-ask). Tôi chỉ không thấy vấn đề với bạn. – JDB