繁体   English   中英

无法将类型'System.Web.UI.Control'隐式转换为'System.Web.UI.UserControl

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

正在尝试在C#中加载usercontrol。

可以使用以下代码将.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;

但是我得到一个强制错误。

有任何想法吗?

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

尝试这个:

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

当您拥有Control类型的引用并尝试分配给UserControl变量而不进行强制转换时,会出现该错误:

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

即使对象的实际类型继承了UserControlLoadControl方法也会返回Control引用。 要将其分配给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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM