Не удается неявно преобразовать тип 'System.Web.UI.Control' в 'System.Web.UI.UserControl - PullRequest
0 голосов
/ 20 октября 2010

пытаюсь загрузить usercontrol в c #.

Можно добавить .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();
        }
    }

}

Я попытался привести управление к пользовательскому контролю, чтобы получить доступ к идентификатору, см. Ниже

UserControl Edit = (UserControl)MyUserControl;

Но я получаю ошибку приведения.

есть идеи?

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Я думаю, что ваша проблема в том, что вы используете кастинг при загрузке элемента управления.Вы должны привести к наиболее конкретному типу (в данном случае Editor), передать необходимые параметры и добавить элемент управления в заполнитель.

Попробуйте это:

Editor myUserControl = (Editor) LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42;
PlaceHolder1.Controls.Add(myUserControl);
0 голосов
/ 20 октября 2010

Вы получаете эту ошибку, когда у вас есть ссылка типа Control и вы пытаетесь присвоить переменной UserControl без приведения:

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

Метод LoadControl возвращает ссылку Control, даже если фактический тип объекта наследует UserControl. Чтобы присвоить его переменной 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;
...