Открытые методы внутри пользовательского элемента управления С# .net
-
03-07-2019 - |
Вопрос
Как можно вызвать общедоступный метод пользовательского элемента управления изнутри страницы?
Я загружаю элемент управления динамически внутри OnInit на странице. Есть идеи?По какой-то причине я получаю ошибку сборки, в которой говорится, что метод не существует, хотя он общедоступен.Начинаю думать, что пользовательское управление не стоит всех хлопот.
Решение
Вы сказали
Control fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
тебе нужно сказать
FracTemplateCtrl fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
Обратите внимание, что fracTemplateCtrl is
объявлен как FracTemplateCtrl
, поэтому Visual Studio знает, что у нее есть TestMethod()
.Когда он объявлен как Control
, визуальная студия не может сделать такое предположение.
Другие советы
Вы приводите пользовательский элемент управления к правильному типу?
Без примера кода трудно сказать наверняка, но я предполагаю, что вам нужно привести ссылку на UserControl к конкретному типу вашего пользовательского элемента управления.Например, если ваш UserControl имеет тип PersonControl, ваш код будет выглядеть примерно так:
PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
Если ваш класс наследуется от UserControl, убедитесь, что при доступе к нему, как уже говорили другие, вы его правильно применяете.Например:
public MyControl : UserControl
{
public void MyMethod(){...}
}
в вашей форме:
private MyControl mycontrol = new MyControl();
private void MainForm()
{
this.Controls.Add(mycontrol);
InitializeComponent();
}
private void DoStuff()
{
((MyControl)mycontrol).MyMethod();
}
Ответ Майка заключается в том, как это делается, но Visual Studio может немного сомневаться в обнаружении класса UserControl и жаловаться, что этот тип не существует.В таких ситуациях мне приходится добавлять <% @Reference %>
на странице, чтобы заставить ее распознавать, даже если на него есть ссылка в файле web.config.