关于c#:带参数动态加载用户控件

Load user control dynamically with parameters

我已经创建了一个用户控件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
    }

}

现在我想动态创建这个控件并传递参数。
我尝试过使用 LoadControl 函数,但它只有两个构造函数:一个带有字符串(路径),另一个带有类型 t 和参数数组。

第一种方法可行,但由于我的参数,必须使用更复杂的方法LoadControl,但我不知道如何使用它。如何将我的 Control 的路径字符串设置为那个奇怪的对象 Type t?


在您的情况下,这无关紧要,因为第二种方法接受传递给正确构造函数的参数,但您根本没有构造函数来控制。

只需使用 .ascx 文件的路径加载控件,转换为正确的类型并一一设置属性:

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

如果你坚持使用构造函数,首先添加这样的:

1
2
3
4
public Controls_pageGeneral(int pageId, int itemIndex)
{
    //code here..
}

然后:

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

将执行与上述相同的操作,因为运行时代码将寻找接受两个整数的构造函数并使用它。