gpt4 book ai didi

.net - 静态/共享功能中的LoadControl

转载 作者:行者123 更新时间:2023-12-04 16:56:45 30 4
gpt4 key购买 nike

任何人都知道如何在共享/静态函数中动态加载控件?该函数本身位于 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 或简单的英文解释。

最佳答案

实际上,你可以这样做(它有效):

UserControl tmp0 = new UserControl();
Control ctl = tmp0.LoadControl("MyControl.ascx");

关于.net - 静态/共享功能中的LoadControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981293/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com