任何人都知道如何动态地加载共享/静态函数内的控件?函数本身是mustinherit/abstract类的内部。 (这是在VB ASP.NET项目)我想要做这样的事情:
VB:LoadControl在静态/共享函数
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或纯英文解释都欢迎。
它是不是被退回是什么......这是你无法从内部调用LoadControl方法静态方法...因为没有实例。 – CSharpAtl 2009-12-30 17:35:31
不用担心,去过那里!拿起一杯咖啡,然后离开啤酒:) :) – Rippo 2009-12-30 17:35:46
@CSharpAtl - 你是正确的,这就是为什么我建议替代品。 – Rippo 2009-12-30 17:36:32