Pregunta

¿Cómo puede invocar el método público de control de usuario desde la página?

Carga el control dinámicamente dentro de OnInit en la página. ¿Alguna idea? Por alguna razón, recibo un error de compilación que dice que el método no existe, aunque sea público. Empezando a pensar que los controles de usuario no valen la pena.

¿Fue útil?

Solución

Has dicho

Control fracTemplateCtrl = 
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

necesitas decir

FracTemplateCtrl fracTemplateCtrl =
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

Tenga en cuenta que fracTemplateCtrl is declarado como FracTemplateCtrl, por lo que Visual Studio sabe que tiene un TestMethod(). Cuando se declara como Control, Visual Studio no puede hacer esta suposición.

Otros consejos

¿Está transfiriendo el Control de usuario al tipo correcto?

Sin un código de muestra, es difícil decirlo con certeza, pero supongo que debe transmitir su referencia al UserControl al tipo específico de su control personalizado. Por ejemplo, si su UserControl es del tipo & Quot; PersonControl & Quot ;, entonces su código se vería así:

PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();

Si su clase está heredando de UserControl, asegúrese de que cuando esté accediendo a ella, como han dicho otros, la esté transmitiendo correctamente. Por ejemplo:

public MyControl : UserControl
{
    public void MyMethod(){...}
}

en su formulario:

private MyControl mycontrol = new MyControl();
private void MainForm()
{
    this.Controls.Add(mycontrol);

    InitializeComponent();
}

private void DoStuff()
{
    ((MyControl)mycontrol).MyMethod();
}

La respuesta de Mike es cómo se hace, pero Visual Studio puede ser un poco inestable al detectar la clase UserControl y quejarse de que el tipo no existe. En esas situaciones, tengo que agregar una etiqueta <% @Reference %> en la página para forzarla a reconocer, aunque se pueda hacer referencia a ella en la web.config.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top