有人知道我如何在共享/静态函数中动态加载控件吗?函数本身位于 mustinherit/abstract 类中。(这是 VB 中的 ASP.NET 项目)我想做这样的事情:
VB:
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
我的 C# 有点生疏,所以这可能有一些语法错误:
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;
}
}
(其中 WidgetName 是一个枚举器。)
我收到“无法在没有类的显式实例的情况下从共享方法或共享成员初始化程序中引用类的实例成员。”,但我不明白这个错误。我明白这意味着什么,我只是不明白为什么编译器不将调用 LoadControl 视为该类的显式实例。使用 LoadControl 从文件创建新控件有什么不明确的?我尝试创建一个新的用户控件并对其进行初始化,然后使用 LoadControl 将其设置为不同的控件无济于事。我也不想做 DirectCast,因为我试图把它放在一个共享的 mustinheret (抽象)类中,因此没有要写入的 .aspx 文件<%@ Reference Control="~/SomeControlPath.ascx" %>
,因此类名不可用。
我要做的是编写一个静态函数,该函数接受一些值并仅基于该控件的源文件位置返回一个控件。最终结果是用户可修改的控件列表。他们得到一列控件,可以根据我指定的可用子控件的静态列表自由添加、删除或重新排序。我不喜欢这种方法。它可能在多个方面确实是错误的。
是的,我知道那里的静态字符串有代码味道,但实际上并不是那样的;这是为了提出问题而进行的简化。
C#、VB 或简单的英语解释都欢迎。