动态添加的控件最终包装在通用类型中? [关闭]

Posted

技术标签:

【中文标题】动态添加的控件最终包装在通用类型中? [关闭]【英文标题】:Dynamically Added Controls End Up Wrapped in a Generic Type? [closed] 【发布时间】:2011-05-21 13:51:49 【问题描述】:

我正在为我们的 CMS 编写一个表单构建器,它将定制控件动态加载到转发器内的面板中。

所有定制控件都继承自 5arx.FormBuilder.FormControl,这是一个基类,它定义了用于初始化、验证、重新填充、收集提交数据的抽象方法。控件范围从简单的文本字段到复杂的复合客户端控件。

一切都很好,但我注意到我觉得有些异常。在编写代码以检索表单控件的过程中。收集他们的数据并将其保存到我的数据库中

因此,例如,定义为存在于命名空间中并且属于类型的控件

5arx.FormBuilder.FormControl.MyBespokeControl Sarx.FormBuilder.FormControl.MyBespokeControl

在运行时报告它的类型(通过对 GetType() 的简单调用)作为类型:

ASP.5arx_FormBuilder_FormControl_MyBespokeControl ASP.Sarx_FormBuilder_FormControl_MyBespokeControl

获取 BaseType 属性将正确检索基础类,但我很困惑为什么会发生这种情况。特别是当我在夏天的大部分时间里将我们的应用程序从其原始形式重构为 VS 网站项目(在 App_Code 文件夹中包含共享代码和其他讨厌的东西)到(IHMO)正确的 Web 应用程序项目 + 支持类库,这样我们就可以拥有控制我们的命名空间,而不是将所有内容编译到 ASP.x 命名空间中:-(

我真的很感激一些解释/澄清。

编辑:修改(假设的)示例根命名空间。

【问题讨论】:

@5arx 在从陌生人那里获得帮助时,愉快的态度在这里创造了奇迹 @5arx - 您的原始问题的内容和意图已得到尊重。你不断带回的煽动性语言没有为问题增加任何价值。如果您对人们回答问题的方式有疑问,请将其提交给 Meta,而不是这里。 @5arx:如果你能设法避免将你的开发者伙伴与杀人不眨眼的极权主义政权相比较,你会做得很多,很多 @5arx 翻阅编辑历史,我不明白你为什么总是提到诸如审查烧书之类的强烈情感概念别的。你的 cmets 本来是要发炎的,他们成功了。但该系统也以另一种方式工作:其他用户可以删除它们,同时保持您的问题相对完整。如果您无法处理此级别的编辑控制,则应考虑不使用此网站。 @5arx “所以,请不要建议在我的翻领上别上一个虚拟的黄色星星” 你把你的“痛苦”等同于种族灭绝行为。除了引用戈德温定律之外,你还让自己看起来像个无知的人。你最近几天所做的所有事情都让你看起来很糟糕。考虑批量删除此线程。 【参考方案1】:

显然,这是为了允许独立于您的代码隐藏更新和重新编译 ASPX 文件。 实际控件/页面类型基本上是从您在代码中编写的类型派生的。

有关更多详细信息,请参阅 this article(从 2006 年开始,但显然仍然相关 :)。

我不能说我对 ASP.NET 了解很多,但根据这篇文章,这看起来与它是否是一个“网站”项目无关。我的猜测是,任何时候你有一个 模板样式的 XML 文件(aspx、ascx 等),ASP.NET 运行时编译器将为您完成所有这些工作。

如果你预编译网站是否会发生,我不知道。

【讨论】:

@5arx:根本不需要任何实际的知识。谷歌搜索“asp.net 类生成 asp 命名空间 msdn”:) 是的,它也用于预编译。这就是“新”的 ASP.Net 2.0 编译模型。我说新是因为它是从旧的 1.1 模型更新而来的。基本上你的整个网站被编译成一个程序集。这是对 1.1 编译模型的根本改变。我相信在 2.0 中也有一个命令行开关可以控制它 - 我不记得我的头顶,但我记得 CM 人员将它添加到我们的 NANT 脚本中。

以上是关于动态添加的控件最终包装在通用类型中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用自动换行动态添加文本块

Redrain 通用菜单控件使用方法和说明(增加动态添加功能附源码和demo)

Dart Flutter 通用 Api 响应类 动态类 数据类型

用户控件,动态创建添加用户控件

C# WPF后台动态添加控件(经典)

winform窗体 Treeview控件子节点动态添加图片