2010-02-11 19 views
8

Tôi đang tải một điều khiển người dùng programatically như thế này:Child Controls là null khi tải Bản quyền thuộc về lập trình qua LoadControl (Type, đối tượng []) quá tải

 protected void Page_Load(object sender, EventArgs e) 
    { 
     // LinqDataSource1.TableName = string.Format("{0}s", _table.Context.Mapping.GetMetaType(_type).Name); 
     _control = Page.LoadControl(typeof(CatalogoGenerico), new object[] { typeof(CTG_ENT_ENTIDAD) }) as CatalogoGenerico; 
     PlaceHolder1.Controls.Add(_control); 
    } 

với constructor này:

 public CatalogoGenerico(Type type):this() 
    { 
     _db = new DataClasses1DataContext(); 
     _type = type; 

    } 

Vấn đề tôi có là tất cả các điều khiển trong điều khiển người dùng của tôi là null, có điều gì khác tôi phải làm để tải các điều khiển con không?

Trả lời

17

Đây là theo thiết kế. Tệp .ascx thực sự thừa kế từ lớp mã-đằng sau, vì vậy .ascx là một kiểu dẫn xuất của lớp mã-đằng sau. Điều này có nghĩa là khi bạn tải lớp cha-code phía sau bằng cách sử dụng phương thức LoadControl(Type, object[]), nó sẽ khởi tạo lớp cha được định nghĩa trong đoạn mã phía sau và không phải lớp .ascx có chứa các điều khiển con.

Nếu bạn sử dụng quá tải Page.LoadControl(string), nó sẽ hoạt động như bạn muốn, vì nó có thể tìm mẫu đúng cách, tìm lớp .ascx đã biên dịch và tải nó.

Cách thay thế khác là khởi tạo tất cả các điều khiển trong tệp .ascx của bạn bằng cách sử dụng mã-đằng sau thay vì đánh dấu.

+0

Điều này không hiệu quả đối với tôi. Không có vấn đề gì tôi đã làm, tôi nhận được ngoại lệ tham chiếu null. –

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