2011-12-04 37 views
9

Tôi đã tạo một điều khiển người dùng.Tải điều khiển người dùng tự động với thông số

public partial class Controls_pageGeneral : System.Web.UI.UserControl 
{ 

    private int pageId; 
    private int itemIndex; 

    public int PageId 
    { 
     get { return pageId; } 
     set { pageId = value; } 
    } 

    public int ItemIndex 
    { 
     get { return itemIndex; } 
     set { itemIndex = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // something very cool happens here, according to the values of pageId and itemIndex 
    } 

} 

Bây giờ tôi muốn động tạo kiểm soát này và vượt qua nó các tham số. Tôi đã thử sử dụng chức năng LoadControl nhưng nó chỉ có hai cấu trúc: một với chuỗi (đường dẫn) và một với kiểu t và mảng tham số. Phương thức đầu tiên hoạt động, nhưng vì các tham số của tôi và phải sử dụng phương thức LoadControl phức tạp hơn, nhưng tôi không biết cách sử dụng nó. Làm thế nào tôi có thể trường hợp chuỗi đường dẫn của điều khiển của tôi để đối tượng lạ Loại t?

Cảm ơn sự giúp đỡ của bạn.

Trả lời

10

Trong trường hợp của bạn, nó không liên quan, vì phương thức thứ hai chấp nhận các tham số được truyền cho hàm tạo thích hợp, nhưng bạn không có hàm tạo nào cả cho điều khiển của bạn.

Chỉ cần tải điều khiển bằng cách sử dụng đường dẫn của tập tin .ascx, đúc để loại thích hợp và thiết lập các thuộc tính từng người một:

Controls_pageGeneral myControl = (Controls_pageGeneral)Page.LoadControl("path here"); 
myControl.PageId = 1; 
myControl.ItemIndex = 2; 

Nếu bạn nhấn mạnh vào việc sử dụng constructor, đầu tiên thêm ví dụ:

public Controls_pageGeneral(int pageId, int itemIndex) 
{ 
    //code here.. 
} 

Và sau đó:

Page.LoadControl(typeof(Controls_pageGeneral), new object[] {1, 2}); 

sẽ làm tương tự như các abov e là mã thời gian chạy sẽ tìm kiếm hàm tạo chấp nhận hai số nguyên và sử dụng nó.

+0

mà namespace sao tôi cần phải sử dụng không? Tôi sợ Control_pageGeneral của tôi không được biết đến trang. – SRachamim

+0

Đó là lớp học của bạn .. nếu đó là trong ứng dụng web khác nhau bạn không thể làm điều đó, nếu không chỉ cần thêm nó vào ứng dụng của riêng bạn. –

+0

không, nó nằm trong cùng một ứng dụng web (được định nghĩa trong web.config) – SRachamim

0

Bằng cách sử dụng phương pháp này, bạn sẽ không thể thấy HTML của UserWebControl khi bạn thêm nó vào vùng chứa.

Xem ở đây:

http://blah.winsmarts.com/2006/05/20/loadcontrol-a-usercontrol--and-pass-in-constructor-parameters.aspx

+1

Trong khi điều này về lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (// meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. –

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