簡體   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