0

我试图在 c# 中加载用户控件。

可以使用以下代码将 .ascx 添加到我的 .aspx 页面:

    Control MyUserControl;
    MyUserControl = LoadControl("~/controls/Editor.ascx");
    PlaceHolder1.Controls.Add(MyUserControl);

但是,我想将ID传递给 Editor.ascx,Editor.ascx 顶部包含以下代码:

private int m_id = 0;
public int ID
{
    get { return m_id; }
    set { m_id = value; }
}
protected void Page_Load(object sender, EventArgs e)    
{
    if (!Page.IsPostBack && !Page.IsCallback)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            TB_Editor.Text = db.DT_Control_Editors.Single(x => x.PageControlID == ID).Text.Trim();
        }
    }

}

我尝试将控制权转换为用户控制权,这样我就可以访问 ID,见下文

UserControl Edit = (UserControl)MyUserControl;

但我得到一个演员错误。

有任何想法吗?

4

2 回答 2

1

我认为您的问题是加载控件时的投射。您应该转换为最具体的类型(在本例中为Editor),传递您需要的参数,然后将控件添加到占位符。

尝试这个:

Editor myUserControl = (Editor) LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42;
PlaceHolder1.Controls.Add(myUserControl);
于 2010-10-20T15:58:39.557 回答
0

当您有类型的引用Control并尝试在不强制转换的情况下分配给UserControl变量时,您会收到该错误:

UserControl myUserControl;
myUserControl = LoadControl("~/controls/Editor.ascx");

即使对象的实际类型继承了该方法,该LoadControl方法也会返回一个引用。要将其分配给您需要强制转换的变量:ControlUserControlUserControl

UserControl myUserControl;
myUserControl = (UserControl)LoadControl("~/controls/Editor.ascx");

但是,UserControl该类没有ID您要访问的属性。要访问它,您需要参考您的用户控件的特定类型。例如:

MyEditorControl myUserControl;
myUserControl = (MyEditorControl)LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42

或者您可以即时创建特定参考来设置属性:

Control myUserControl;
myUserControl = LoadControl("~/controls/Editor.ascx");
((MyEditorControl)myUserControl).ID = 42;
于 2010-10-20T16:14:30.393 回答