![](/img/trans.png)
[英]C# — Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.WebControls.CheckBox'
[英]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");
即使对象的实际类型继承了UserControl
, LoadControl
方法也会返回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.