Открытые методы внутри пользовательского элемента управления С# .net

StackOverflow https://stackoverflow.com/questions/603419

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top