开发者

Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.UserControl

am trying to load usercontrol in c#.

Can add the .ascx onto my .aspx page by using the code below:

    Control MyUserControl;
    MyUserControl = LoadControl("~/controls/Editor.ascx");开发者_开发技巧
    PlaceHolder1.Controls.Add(MyUserControl);

However, I want to pass ID into Editor.ascx, top of the Editor.ascx contains the following code:

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();
        }
    }

}

I tried casting control to user control so I can get access to ID see below

UserControl Edit = (UserControl)MyUserControl;

But I get a cast error.

any ideas?


I think your problem is your casting when you load the control. You should cast to the most specific type (in this case, Editor), pass the parameters you need, and then add the control to the placeholder.

Try this:

Editor myUserControl = (Editor) LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42;
PlaceHolder1.Controls.Add(myUserControl);


You get that error when you have a reference of type Control and try to assign to a UserControl variable without casting:

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

The LoadControl method returns a Control reference even if the actual type of the object inherits UserControl. To assign it to a UserControl variable you need to cast it:

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

However, the UserControl class doesn't have the ID property that you want to access. To get access to that you need a reference of the specific type of your user control. For example:

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

Or you can just create the specific reference on the fly to set the property:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜