2009-02-03 27 views
6

Tôi đang tự động thêm điều khiển người dùng tùy chỉnh vào trang theo this post.Đặt thuộc tính khi được thêm động UserControl

Tuy nhiên, tôi cần đặt thuộc tính trên điều khiển người dùng khi tôi thêm nó vào trang. Làm thế nào để làm điều đó?

đoạn mã sẽ được tốt đẹp :)

chi tiết:

Tôi có một điều khiển người dùng tùy chỉnh với một lĩnh vực công cộng (bất động sản ... ví dụ public int someId;)

Như tôi đã thêm một UserControl đến một trang, kiểu của nó là UserControl. Do tôi chỉ cần đúc nó vào MyCustomUCType và thiết lập một tài sản trên một điều khiển cast?

p.s. có vẻ như tôi đã trả lời câu hỏi của riêng tôi sau khi tất cả.

+0

Bạn có ý nghĩa gì khi đặt thuộc tính? thuộc tính html? khi nào bạn cố gắng thêm thuộc tính vào sự kiện DataBound hoặc một cái gì đó? sự kiện nào bạn tạo ra sự kiểm soát? – bendewey

+0

Bài đăng được liên kết giải thích những gì anh ấy đang cố gắng làm –

Trả lời

10

Ah, tôi đã trả lời trước khi bạn thêm hiểu rõ thêm. Câu trả lời ngắn gọn là, có, chỉ cần đúc nó như là loại tùy chỉnh của bạn.

Tôi sẽ để phần còn lại của câu trả lời của tôi ở đây để tham khảo, mặc dù nó không xuất hiện bạn sẽ cần nó.


Mượn từ mã trong câu hỏi khác và giả định rằng tất cả điều khiển người dùng của bạn có thể được kế thừa từ cùng một lớp cơ sở, bạn có thể thực hiện việc này.

Tạo một lớp mới để hoạt động như sự kiểm soát cơ sở:

public class MyBaseControl : System.Web.UI.UserControl 
{ 
    public string MyProperty 
    { 
     get { return ViewState["MyProp"] as string; } 
     set { ViewState["MyProp"] = value; } 
    } 
} 

Sau đó cập nhật người dùng của bạn điều khiển để kế thừa từ lớp cơ sở của bạn thay vì UserControl:

public partial class SampleControl2 : MyBaseControl 
{ 
    .... 

Sau đó, ở nơi đâu bạn tải các điều khiển, thay đổi điều này:

UserControl uc = (UserControl)LoadControl(controlPath); 
PlaceHolder1.Controls.Add(uc); 

to:

MyBaseControl uc = (MyBaseControl)LoadControl(controlPath); 
uc.MyProperty = "foo"; 
PlaceHolder1.Controls.Add(uc); 
+0

Tôi nghĩ rằng điều này chỉ làm việc trong các dự án ứng dụng web và không phải dự án trang web. Đó vẫn là trường hợp? –

+0

Nó sẽ hoạt động, bất kể. Tôi chưa bao giờ gặp vấn đề với nó. –

1

Có, bạn chỉ cần truyền điều khiển đến loại thích hợp. EX:

((MyControl)control).MyProperty = "blah"; 
+0

Điều này không hoạt động trong các dự án trang web có kiểm soát người dùng –

+0

nó hoạt động tốt. –

+0

Nó hoạt động nếu bạn đăng ký kiểm soát trong trang. –

2

"Như tôi đã thêm một UserControl đến một trang, gõ của nó là UserControl Đừng tôi chỉ cast nó vào MyCustomUCType và thiết lập một tài sản trên một điều khiển dàn diễn viên.?"

Đó là những gì tôi muốn làm. Nếu bạn đang thực sự sử dụng mã ví dụ mà nó tải các điều khiển khác nhau, tôi cũng sẽ sử dụng if (x là ControlType).

if(x is Label) 
{  
    Label l = x as Label; 
    l.Text = "Batman!"; 
} 
else 
    //... 

Sửa: Bây giờ là 2.0 tương thích

+0

tốt như câu trả lời là, có vẻ như bạn đang sử dụng 3.5 framework, của tôi là 2.0. thanx. –

+0

chỉ cần thay đổi var để Label và bạn sẽ được compat với 2.0 –

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