Trong ứng dụng ASP.NET của tôi, tôi đang tải một ascx động sử dụng LoadControl, sử dụng mô hình sau:ViewState của ascx mất giữa postbacks
var ctrl = LoadControl("/path/to/control.ascx");
((ControlType)ctrl).SomeProperty = someData;
placeholder.Controls.Add(ctrl);
Việc kiểm soát mà tôi thêm tiết kiệm giá trị tài sản SomeProperty trực tiếp đến ViewState, như sau:
public int? SomeProperty
{
get { return (int?)ViewState["SomeProperty"]; }
set { ViewState["SomeProperty"] = value; }
}
Sau đó, kiểm soát ascx sống một mình và tất cả đều tốt cho đến khi xảy ra postback. Khi trang đăng lại, đột nhiên trạng thái xem trống! Tôi nghi ngờ điều này xảy ra bởi vì tôi thao tác ViewState trước khi tôi thêm ascx instantiated vào trang của tôi. Ngoài ra, tôi có thể ngăn chặn các ViewState khỏi bị mất bằng cách thêm dòng sau trong phương pháp Page_Load()
kiểm soát ascx của tôi:
SomeProperty = SomeProperty;
tôi phải làm các việc trên cho mỗi và mọi tài sản để đảm bảo rằng các ViewState được bảo tồn. Bây giờ, có cách nào đẹp hơn để làm việc này không? Thao tác ViewState sau khi tạo .ascx đã được thêm vào trang không phải là một tùy chọn - tôi cần nội dung của ViewState trong các phương thức Page_Init()
và Page_Load()
, được kích hoạt ngay khi tôi thêm .ascx vào trang của mình.
Cảm ơn.
Tôi gặp phải vấn đề tương tự một lần và trong trường hợp của tôi, vấn đề là trong bảng dữ liệu toàn thời gian, chúng tôi đặt tất cả các điều khiển để không sử dụng viewstate. Quan điểm của tôi là việc thêm các điều khiển tự động có thể không phải là vấn đề, nhưng những nơi ẩn mà viewstate được đặt là vô hiệu hóa. –