2009-02-03 44 views
6

我按照this post動態地向頁面添加自定義用戶控件。在動態添加的UserControl上設置屬性

但是,我需要在用戶控件上設置一個屬性,並將其添加到頁面中。我怎麼做?

代碼片段將是不錯的:)

詳情:

我有一個公共領域的自定義用戶控件(屬性...如公衆詮釋someId;)

正如我添加UserControl到一個頁面,其類型是UserControl。我只是將它投入到MyCustomUCType並設置一個屬性在一個強制控制?

p.s.看起來我畢竟已經回答了我自己的問題。

+0

設置屬性是什麼意思? html屬性?你什麼時候嘗試在DataBound事件上添加屬性?哪個事件是你創建控件的? – bendewey 2009-02-03 20:46:06

+0

鏈接的帖子解釋他正在嘗試做什麼 – 2009-02-03 20:47:53

回答

10

啊,我回答了你添加額外的澄清之前。簡而言之,是的,只是把它作爲你的自定義類型。

我將其餘的答案留在這裏作爲參考,雖然它沒有出現,你會需要它。


從其它問題的代碼借款,並假設所有的用戶控件,可向從同一個基類繼承,你可以做到這一點。

創建一個新類來充當基控制:

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

那麼你的用戶控件來從你的基類,而不是用戶控件繼承更新:

public partial class SampleControl2 : MyBaseControl 
{ 
    .... 

然後,在地方您加載的控件,更改此:

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

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

是的,您只需將控件投射到適當的類型。 EX:

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

這不適用於用戶控件的網站項目 – 2009-02-03 21:21:56

+0

它工作得很好。 – 2009-02-03 21:33:25

2

「當我添加一個用戶控件的頁面,其 類型是用戶控件我只是 丟在MyCustomUCType和設置屬性 上投控制。?」

這就是我要做的。如果你實際上使用了加載不同控件的示例代碼,那麼我會使用if(x是ControlType)。

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

編輯:現在是2.0兼容