[英]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.