动态添加的控件最终包含在通用类型中?

时间:2010-12-07 12:53:01

标签: c# .net asp.net inheritance

我正在为我们的CMS编写一个formbuilder,它可以动态地将定制控件加载到转发器中的面板中。

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

这一切都运作得很好,但我注意到一些我认为是异常的东西。在编写代码以检索表单控件的过程中。收集他们的数据并将其保存到我的数据库中我注意到,如果你在(v。恼人的)VS'网站项目'模式中编写代码,他们的类型将恢复为对象的输入方式。

因此,例如,一个控件被定义为生活在命名空间中并且类型为

<击> 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应用程序项目+支持claass库,以便我们可以控制我们的命名空间,而不是将所有内容编译到ASP.x命名空间中: - (

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

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

1 个答案:

答案 0 :(得分:2)

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

请参阅this article(从2006年开始,但仍然显然相关:)了解更多细节。

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

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