2010-09-17 34 views
5

Có bất kỳ lựa chọn thay thế ViewState nào khác không? Tôi đã nghe rất nhiều Phiên, giữ trạng thái của một số trạng thái điều khiển của trang và bị phá hủy ngay khi người dùng rời khỏi trang.Lựa chọn thay thế ViewState trong ASP.NET Webforms

Tôi biết tôi đang mô tả chính bản thân ViewState, nhưng tôi đang tìm một mẫu các loại hoặc đề xuất để tôi có thể tránh hoàn toàn ViewState.

Ví dụ về cách tôi đang sử dụng nó là nơi tôi lưu trữ nội dung của lưới của tôi (Danh sách các Chế độ xem) tới ViewState. Điều này giúp biết mục nào bị bẩn, mục nào đã bị sửa đổi, chỉ mục của chúng, đối tượng được chọn hiện tại, v.v.

Trả lời

3

Một trong những đồng nghiệp của tôi đã phát triển một cách để lưu trữ dữ liệu ViewState trong một tệp. Vì vậy, dữ liệu viewstate nặng không được truyền giữa máy khách và máy chủ. Chỉ cần một khóa (đó là tệp dữ liệu ViewState) đại diện cho tệp dữ liệu ViewState được tổ chức dưới dạng biến phiên. Trong các thử nghiệm của chúng tôi, chúng tôi thấy rằng việc lưu viewstate trong tệp đã giảm thời gian phản hồi của máy chủ bằng cách giảm số lượng viewstate (số lượng rất lớn).

Trong số article trong "Giữ trạng thái xem trên máy chủ", bạn có thể tìm hiểu cách thực hiện phương pháp đó. Bạn thậm chí có thể lưu trữ dữ liệu ViewState trong một bảng cơ sở dữ liệu, cho phép linh hoạt hơn nếu ứng dụng của bạn nằm trong một trang trại.

+0

Mặc dù điều đó dường như không phải là một thay thế, bạn có thể tăng hiệu suất của ứng dụng mà không thay đổi toàn bộ kiến ​​trúc. – Zafer

+0

Tôi chắc chắn sẽ xem xét điều này. – Jonn

0

Bạn có Session và bạn có Cache.

Phiên là mỗi người dùng, Cache là toàn cầu.

Bạn có thực sự cần lưu trữ tất cả điều này trong ViewState không? tại sao bạn có thể gửi (nhưng bạn rất mơ hồ trong câu hỏi của bạn vì vậy tôi đang làm một vài giả định ở đây) nhận được tất cả các dữ liệu cũ từ DB, so sánh nó với dữ liệu mới của bạn, và cập nhật những gì được thay đổi?

+0

Tôi cảm thấy thoải mái hơn khi tiểu bang cư trú trong chế độ xem Chế độ xem của tôi. (Tôi chỉ giữ những thứ mà tôi cảm thấy thực sự cần thiết để kiểm soát hoạt động.) Mọi thứ khác được tạo lại trên postback. Sẽ không nhận được từ DB, tái tạo các ViewModels, và sau đó làm so sánh được chậm hơn nói chung? – Jonn

1

Một tùy chọn khác đang nén ViewState của bạn. Nó vẫn cho biết thêm số lượng lớn cho chuyến đi khứ hồi, nhưng nói chung nó là tối thiểu.

Nếu bạn đang sử dụng Net 4, có một số hữu ích bổ sung ViewState mới:

ASP.NET 4.0: more control on viewstate management

+0

Tsk. Chúng tôi vẫn đang phát triển hầu hết các ứng dụng của chúng tôi trong .Net 3.5. – Jonn

1

Tôi không nghĩ rằng bạn đang làm cho một trường hợp di chuyển ra khỏi ViewState.

Nếu bạn đang nắm giữ một lượng lớn dữ liệu, bạn sẽ gặp phải sự cố khi vẫn tồn tại ở bất kỳ nơi nào khác. Phiên? nó sẽ thổi tiêu thụ bộ nhớ của bạn, hoặc nếu nó ra khỏi quá trình bạn sẽ được di chuyển tất cả những gì xung quanh mỗi lần Session được nạp/bằng văn bản (một lần cho mỗi yêu cầu). Bạn có thể tất nhiên, cố gắng để hạn chế vấn đề bằng cách giải phóng các dữ liệu được lưu trữ càng sớm càng tốt/như TempData trong asp.net MVC.

Bạn có thể giảm thiểu lượng thông tin bạn cần để lưu trữ để kiểm tra hồ sơ đã sửa đổi bằng cách giới thiệu dấu thời gian/hoặc phiên bản ghi. Bằng cách này, bạn chỉ có thể kiểm tra xem phiên bản mới đã được thêm chưa và hiển thị cho người dùng cả những gì họ đã cố lưu và những gì người khác đã lưu.