Не удается неявно преобразовать тип 'System.Web.UI.Control' в 'System.Web.UI.UserControl
Я пытаюсь загрузить 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();
}
}
}
Я попытался привести управление к пользовательскому контролю, чтобы получить доступ к ID, см. Ниже
UserControl Edit = (UserControl)MyUserControl;
Но я получаю ошибку приведения.
есть идеи?
2 ответа
Я думаю, что ваша проблема в том, что вы используете кастинг, когда вы загружаете элемент управления. Вы должны привести к наиболее конкретному типу (в этом случае, Editor
), передайте необходимые параметры и добавьте элемент управления к заполнителю.
Попробуй это:
Editor myUserControl = (Editor) LoadControl("~/controls/Editor.ascx");
myUserControl.ID = 42;
PlaceHolder1.Controls.Add(myUserControl);
Вы получаете эту ошибку, когда у вас есть ссылка типа 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;