Alguien sabe cómo puedo cargar dinámicamente un control en el interior de una función compartida/estática? La función en sí está dentro de una clase mustinherit/abstract. (Es un proyecto ASP.NET en VB) Quiero hacer algo como esto:
VB:LoadControl en función estática/compartida
Public Shared Function GetWidget(ByVal name As WidgetName) As Control
Select Case name
Case WidgetName.Name1
Return LoadControl("~/Control1.ascx")
Case WidgetName.Name2
Return LoadControl("~/Control2.ascx")
Case WidgetName.Name3
Return LoadControl("~/Control3.ascx")
End Select
End Function
mi C# es un poco oxidado, por lo que este podría tener algunos errores de sintaxis:
Public Static Control GetWidget(WidgetName name)
{
switch (name)
{
Case WidgetName.Name1:
return LoadControl("~/Control1.ascx");
break;
Case WidgetName.Name2:
return LoadControl("~/Control2.ascx");
break;
Case WidgetName.Name3:
return LoadControl("~/Control3.ascx");
break;
}
}
(Donde WidgetName es un enumerador)
Me aparece "No puedo hacer referencia a un miembro de instancia de una clase desde un método compartido o inicializador de miembro compartido sin una instancia explícita de la clase.", Pero no lo hago entiendo este error Entiendo lo que significa, simplemente no entiendo por qué llamar al LoadControl no es visto por el compilador como una instancia explícita de la clase. ¿Qué no es explícito sobre el uso de LoadControl para crear un nuevo control desde un archivo? Traté de crear un nuevo control de usuario e inicializarlo, y luego establecerlo en un control diferente con LoadControl en vano. Tampoco quiero hacer un DirectCast porque estoy tratando de poner esto en una clase compartida, mustinhere (abstracta), que por lo tanto no tiene un archivo .aspx para escribir en un <%@ Reference Control="~/SomeControlPath.ascx" %>
, por lo que el nombre de la clase no está disponible .
Lo que estoy tratando de hacer es escribir una función estática que tiene algún valor y devuelve un control basado únicamente en la ubicación del archivo fuente de ese control. El resultado final es una lista de controles modificables por el usuario. Obtienen una columna de controles que agregan, eliminan o reordenan libremente en función de una lista estática de controles secundarios disponibles que especifico. No estoy casado con este enfoque; podría estar realmente mal en más de un sentido.
Sí, lo sé las cuerdas estáticas estar allí es el olor de código, que en realidad no se parecen a eso; es una simplificación por el hecho de hacer la pregunta.
C#, VB, o explicaciones en inglés llano todos bienvenidos.
No se trata de lo que está siendo devuelto ... es que no se puede llamar al método LoadControl desde el interior el método estático ... porque no hay instancia. – CSharpAtl
¡Sin preocupaciones, estado allí! Tómate un café y aléjate de la cerveza :) :) – Rippo
@CSharpAtl - Estás en lo cierto y por eso te sugerí una alternativa. – Rippo