我正在尝试在c#中加载usercontrol。
可以使用以下代码将.ascx添加到我的.aspx页面:
Control MyUserControl;
MyUserControl = LoadControl("~/controls/Editor.ascx");
PlaceHolder1.Controls.Add(MyUserControl);
但是,我想将 ID 传递给Editor.ascx,编辑器的顶部.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;
但是我得到了施法错误。
任何想法?
答案 0 :(得分:1)
我认为你的问题是你加载控件时的转换。您应该转换为最具体的类型(在本例中为Editor
),传递所需的参数,然后将控件添加到占位符。
试试这个:
Editor myUserControl = (Editor) LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42;
PlaceHolder1.Controls.Add(myUserControl);
答案 1 :(得分:0)
如果您的引用类型为Control
,并且尝试在不进行转换的情况下分配给UserControl
变量,则会出现该错误:
UserControl myUserControl;
myUserControl = LoadControl("~/controls/Editor.ascx");
即使对象的实际类型继承LoadControl
,Control
方法也会返回UserControl
引用。要将其分配给UserControl
变量,您需要将其转换为:
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;