【问题标题】:Partial User Control部分用户控制
【发布时间】:2010-08-19 00:39:38
【问题描述】:

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

缺少部分修饰符 “测试”类型的声明;其他 这种类型的部分声明 存在

另一个声明在哪里?

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

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

UserControl.ascx
UserControl.ascx.cs 

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


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

【问题讨论】:

  • 请解释一下为什么你必须使用泛型?对于设计师来说,它必须是部分的。 Designer 放置 runat="server" 组件声明,这些声明在 Control 事件处理程序中被视为私有成员

标签: c# asp.net user-controls webforms partial-classes


【解决方案1】:

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

来自MSDN:

代码文件包含部分 类——即类声明 使用关键字 partial (Partial in Visual Basic) 表明它 仅包含总代码的一部分 这构成了整个班级 页。在部分类中,您添加 您的应用程序的代码 页面需要。

这是关键部分:

当页面被编译时,ASP.NET 生成一个部分类基于 .aspx 文件;这个类是部分的 代码隐藏类文件的类。 生成的部分类文件 包含页面的声明 控制。这个部分类使 您的代码隐藏文件用作 完整课程的一部分 要求您声明控件 明确的。

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

【讨论】:

  • 我只会创建一个类型属性,它似乎不会作为泛型发生,尽管它应该发生。谢谢凯尔西。
  • 你能通过在UserControl 类中声明一个嵌套在中的泛型类型来实现你想要的吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    UserControl.ascx
    UserControl.cs
    UserControl.designer.cs
    

    设计器文件有一个partial 实现,因为你的代码也必须是partial。

    【讨论】:

    • 实际上是的,如果您制作 WebApplication,您确实有 3 个文件,但如果您制作网站,您只会得到 2 个文件! UserControl.ascx UserControl.ascx.cs 那么网站中的另一个声明在哪里?
    • 它被编译到bin 目录下的.dll 文件中。
    • @ZeusSE 请在下面查看我的回答,When the page is compiled, ASP.NET generates a partial class based on the .aspx file;
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多