0

c# でユーザー コントロールを読み込もうとしています。

以下のコードを使用して、.aspx ページに .ascx を追加できます。

    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;

しかし、キャストエラーが発生します。

何か案は?

4

2 に答える 2

1

あなたの問題は、コントロールをロードするときのキャストだと思います。最も具体的な型 (この場合はEditor) にキャストし、必要なパラメーターを渡してから、コントロールをプレースホルダーに追加する必要があります。

これを試して:

Editor myUserControl = (Editor) LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42;
PlaceHolder1.Controls.Add(myUserControl);
于 2010-10-20T15:58:39.557 に答える
0

タイプの参照があり、キャストせずControlに変数に代入しようとすると、そのエラーが発生します。UserControl

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

オブジェクトの実際の型が継承されている場合でも、このLoadControlメソッドは参照を返します。それを変数に割り当てるには、キャストする必要があります。ControlUserControlUserControl

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;
于 2010-10-20T16:14:30.393 に答える