2012-04-20 91 views
3

我有ASPX頁面,在preinit我檢查whitch用戶控件加載。傳輸值到動態加載的網頁用戶控件

control = "~/templates/" + which + "/master.ascx"; 

然後在頁面加載,我加載控制

Control userControl = Page.LoadControl(control); 
Page.Controls.Add(userControl); 

如何可以傳輸動態加載的用戶控制,從ASPX到ASCX?

回答

5

您可以創建一個由實現的接口所有的自定義控件。這樣,您可以投射到該界面並使用它來傳遞您的數據。考慮下面這個例子:

public interface ICustomControl 
{ 
    string SomeProperty { get; set; } 
} 

...和你的控件:

public class Control1 : Control, ICustomControl 
{ 
    public string SomeProperty 
    { 
     get { return someControl.Text; } 
     set { someControl.Text = value; } 
    } 

    // ... 
} 

現在,你可以做這樣的事情:

Control userControl = Page.LoadControl(control); 
Page.Controls.Add(userControl); 

if (userControl is ICustomControl) 
{ 
    ICustomControl customControl = userControl as ICustomControl; 
    customControl.SomeProperty = "Hello, world!"; 
} 
+0

完美! :) 謝謝 – 2012-04-20 19:06:18

0

您可以使用Page.Findcontrol(...)獲取父頁面中的控件。

看到:http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx

只要確保你設定的ID代碼,這樣你就可以訪問它。像:

Control userControl = Page.LoadControl(control); 
userControl.ID = "ctlName"; 
Page.Controls.Add(userControl); 
0

投在你的控制類的類型,你需要爲控件創建公共屬性(如果您想將數據傳輸到控制)

var userControl = (master)Page.LoadControl(control); 

userControl.yourpublicproperty ="some text"; 

Page.Controls.Add(userControl);