2009-08-24 24 views
6

Vì lý do nào đó mà chế độ xem của ứng dụng của tôi trở nên khổng lồ (khoảng 14 triệu ký tự). Nó thêm khoảng 1 phút thời gian tải. Nếu trang cuối cùng tải (thường không phải là trang), máy chủ sẽ gặp sự cố mỗi lần ai đó gửi biểu mẫu vì "Post size exceeded allowed limits."Trường ẩn Viewstate quá lớn khiến mọi thứ sụp đổ

Nó xuất hiện đột ngột. Tôi không thêm bất kỳ trường nào, chỉ một số javascript trên trang.

Mọi người đã nói với tôi để kiểm tra xem cheating của ViewState. Google đã yêu cầu tôi thực hiện việc này:

<pages maxPageStateFieldLength="1024"> 

... vì vậy bây giờ thay vì trường ẩn lớn bây giờ tôi có khoảng 100 trường ẩn rất lớn. Nó không chính xác những gì tôi đang tìm kiếm.

Tại sao .NET làm điều gì đó như thế này? Làm thế nào tôi có thể sửa lỗi này?

+0

Bất kỳ cơ hội nào bạn có thể tắt chế độ xem cho một số điều khiển? –

+2

Thật khó để nói mà không cần nhìn vào trang, nhưng hãy thử một bộ giải mã ViewState để xem những gì đang được nhúng trong ViewState. Bạn cũng nên tắt chế độ xem lưới/bảng nếu bạn không cần chúng và có thể triển khai chế độ xem nén ngoài việc bật gzip trên IIS. –

+0

Các điều khiển là các trường nhập và không có cách nào để tắt chế độ xem cho những người đó và ngay cả khi nó yêu cầu tôi phải viết lại nhiều mã. Ngoài ra có 10 lĩnh vực, nó không phải là xấu ... phải không? – marcgg

Trả lời

7

tôi sẽ đề nghị sử dụng một tiện ích để giải mã ViewState của bạn, do đó bạn có thể nhận được một ý tưởng về những gì thực sự là bên trong nó (kể từ khi bạn rõ ràng là có rất nhiều thông tin trong đó bạn dường như không cần.)

A viewstate decoder sẽ cho phép bạn xem nội dung trong tiểu bang mà bạn không mong đợi. Sau đó, bạn có thể sửa đổi mã của bạn, loại bỏ các kiểm soát vi phạm, hoặc chọn lọc vô hiệu hóa ViewState (sử dụng các thuộc tính EnableViewState="false") cho các điều khiển mà không nên có nó được kích hoạt.

+0

Cảm ơn, có vẻ khá thú vị, tôi sẽ kiểm tra điều này ngay bây giờ – marcgg

+0

Đó là gây phiền nhiễu, phần mềm bị treo, dường như chuỗi quá lớn. Nhưng bây giờ tôi biết rằng viewstate của tôi là 13 428 604 ký tự dài :) – marcgg

+0

Nó cuối cùng chạy mà không bị rơi vào nỗ lực thứ 5 của tôi :) Có vẻ như nó đặt tất cả các trang của tôi trong viewstate ... nó khá lạ. Tôi sẽ cố gắng để xem những gì là logic ở đây và trở lại trên SO – marcgg

3

Hãy nhớ rằng các điều khiển sẽ giữ lại các giá trị của chúng trên các lần đăng lại mà không cần xem. Bạn thường có thể vô hiệu hóa ViewState cho rất nhiều điều khiển của bạn mà không có bất kỳ vấn đề nào. Để tắt chế độ xem cho một bộ kiểm soát cụ thể:

EnableViewState="false" 

Nếu bạn đặt điều này cho tất cả các lưới và bất kỳ điều khiển nào bạn không cần xem sẽ giảm đáng kể kích thước.

+0

Tôi đã làm điều này và nó đã không thay đổi bất cứ điều gì. Tôi bao gồm.ascx tập tin như thế này: và có khá nhiều JS đang diễn ra trong đó. Nó có thể được liên kết? Tôi vô hiệu hóa các ViewState cho những điều này và nó đã không sửa chữa nó – marcgg

+0

Tôi figured it out (xem câu trả lời được chấp nhận)! Tôi chấp nhận beska bởi vì đó là câu trả lời đã giúp tôi tìm ra vấn đề, nhưng bạn cũng hữu ích ... vì vậy +1 và cảm ơn bạn rất nhiều :)! – marcgg

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