3

在 Asp.net Web 表单中,为什么用户控件必须是局部的?我试图删除 partial 关键字,它说:

声明类型“test”时缺少部分修饰符;存在此类型的另一个部分声明

另一个声明在哪里?

我正在尝试通过用户控件传递泛型类型,我该怎么做?除非我也更改其他声明,否则我不能。我找不到它,所以我删除了 partial 关键字。

注意:如果您制作 WebApplication,您确实有 3 个文件,但如果您制作网站,您只会得到 2 个文件!

UserControl.ascx
UserControl.ascx.cs 

那么在网站上的另一个声明在哪里?


我想要通用的原因是因为我制作了一个网格用户控件,所以我想传递数据源将具有的类型。

4

4 回答 4

1

每个用户控件实际上有三个文件。

UserControl.ascx
UserControl.cs
UserControl.designer.cs

设计器文件有一个partial实现,因为您背后的代码也必须是partial.

于 2010-08-19T00:43:46.217 回答
1

它们必须是局部的,因为设计器会自动生成您在“设计”窗口中所做的事情。通常该代码位于foo.designer.cs(或任何 asp.net 表单的扩展名)中。如果要更改类,则必须在没有设计器的情况下手动生成 UI,或者使用设计器并将代码复制到适当的类中。

于 2010-08-19T00:44:07.343 回答
1

ASP.NET 将部分类用于代码隐藏,因为它必须将您在 ASPX 文件中声明的所有服务器端控件生成到一个类中,并合并与代码绑定一起出现的所有其他数据文件。它允许 ASP.NET 使用的类分布在多个文件中。

来自MSDN

代码文件包含一个分部类,即带有关键字 partial(Visual Basic 中的 Partial)的类声明,表明它只包含构成页面完整类的全部代码的一部分。在分部类中,添加应用程序页面所需的代码。

这是关键部分:

页面编译时,ASP.NET 会根据 .aspx 文件生成分部类;这个类是代码隐藏类文件的部分类。生成的部分类文件包含页面控件的声明。此部分类使您的代码隐藏文件可以用作完整类的一部分,而无需您显式声明控件。

您想通过向用户控件添加泛型类型来做什么?您可以通过向TypeUserControl 添加属性然后使用它来完成此操作吗?

于 2010-08-19T00:48:08.567 回答
0

他们不必是部分的,事实上我从来没有使用过部分类。一些代码生成工具将使用部分代码,以便它们可以更容易地根据您在没有您的情况下所做的 GUI 工作来更改位,并且它会相互影响,但这是针对工具而不是针对代码的。

于 2010-08-19T00:45:58.507 回答