2012-08-31 31 views
5

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à:

  1. yếu tố Form như <input> (và với Request.Form[c.UniqueID] này có thể tránh được vẫn)
  2. 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.

+1

Ngoài ra: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx thật thú vị – Patrick

Trả lời

4

Sử dụng ViewState cho những thứ không cần thiết để kiểm soát của bạn hoạt động.

Sử dụng ControlState cho những thứ cần thiết để kiểm soát của bạn hoạt động ngay cả khi ViewState bị tắt.

Giá trị ban đầu và hệ thống phân cấp điều khiển (ngay cả điều khiển html) được biên dịch thành Tệp ASP.NET tạm thời khi trang được yêu cầu lần đầu tiên. Vì vậy, họ không cần phải được lưu trữ bất cứ nơi nào khi họ không bao giờ thay đổi (và thậm chí ViewState sẽ không lưu chúng).

Điều khiển chỉ lưu trữ các thuộc tính trong ViewState đã thay đổi trong vòng đời của trang (kể từ TrackViewState). Kiểm soát trạng thái đã thay đổi là "bẩn". Ví dụ: nếu bạn thay đổi TextBox1.Text trong page_load, ViewState.IsItemDirty("TextBox1.Text") sẽ trả về true. Các giá trị này sẽ được lưu trữ trong ViewState.

Nhìn herehere. (Tôi thực sự khuyên bạn nên đọc cả bài viết)

Control State vs. View State Example

0

Tôi nghĩ rằng bạn có quyền quan tâm đến tình trạng sưng phồng của tuyến tiền liệt, nhưng những tùy chọn nào khác có sẵn cho bạn? Nếu bạn không lưu trữ dữ liệu biến của mình ở đó, bạn sẽ đặt nó ở đâu? (Bạn có thể xem xét việc xóa một số mục cấu hình- có thể không cho phép người dùng thay đổi nhiều thuộc tính).

3

Kiểm tra bài viết này trên MSDN bao gồm khi nào, ở đâu và những gì để sử dụng rất nhiều tùy chọn quản lý nhà nước có sẵn trong ASP.NET quan điểm phần nhà nước được đăng tải dưới đây để biết thuận tiện - kiểm tra các yêu cầu của bạn chống lại những ưu điểm và nhược điểm nên hướng dẫn bạn về cách sử dụng trên cơ sở từng trường hợp:

Tổng số bài viết ở đây: http://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx

ViewState Trích:

01.

Xem Nhà nước

Web Forms trang này cung cấp thuộc tính ViewState là một built-in cấu trúc cho tự động duy trì các giá trị giữa nhiều yêu cầu cho trang cùng. Trạng thái xem được duy trì dưới dạng trường ẩn trong trang. Để biết thêm thông tin về , hãy xem Tổng quan về quản lý nhà nước ASP.NET.

Bạn có thể sử dụng trạng thái xem để lưu trữ các giá trị theo trang cụ thể của mình trên các chuyến đi khứ hồi khi trang đăng lại chính nó. Ví dụ: nếu ứng dụng của bạn đang duy trì thông tin dành riêng cho người dùng - tức là, thông tin được sử dụng trong trang nhưng không nhất thiết là một phần của bất kỳ điều khiển nào - bạn có thể lưu trữ trong trạng thái xem.

Ưu điểm của việc sử dụng view state là:

Không có máy chủ nguồn lực được yêu cầu Nhà nước xem được chứa trong một cấu trúc trong mã trang.

Triển khai đơn giản Xem trạng thái không yêu cầu bất kỳ chương trình tùy chỉnh nào để sử dụng. Nó được bật theo mặc định để duy trì dữ liệu trạng thái trên các điều khiển .

Tính năng bảo mật nâng cao Giá trị trong trạng thái xem được băm, được nén và được mã hóa để thực hiện Unicode, cung cấp bảo mật nhiều hơn so với sử dụng trường ẩn.

Nhược điểm của việc sử dụng view state là:

Performance cân nhắc Bởi vì tình trạng xem được lưu trữ trong trang đó, lưu trữ các giá trị lớn có thể gây ra trang để làm chậm khi người dùng hiển thị nó và khi họ đăng nó. Điều này đặc biệt có liên quan cho thiết bị di động, nơi băng thông thường là hạn chế.

Giới hạn thiết bị Thiết bị di động có thể không có dung lượng bộ nhớ để lưu trữ một lượng lớn dữ liệu trạng thái xem.

Rủi ro bảo mật tiềm ẩn Trạng thái chế độ xem được lưu trữ trong một hoặc nhiều trường ẩn trên trang. Mặc dù chế độ xem lưu trữ dữ liệu ở định dạng được băm nhưng vẫn có thể bị giả mạo. Thông tin trong trường ẩn có thể được nhìn thấy nếu nguồn đầu ra của trang được xem trực tiếp, tạo sự cố bảo mật tiềm ẩn. Để biết thêm thông tin, hãy xem ASP.NET Bảo mật ứng dụng web và thực tiễn bảo mật cơ bản cho ứng dụng Web .

Các vấn đề liên quan