【问题标题】:Converting ASP Web Form to User Control将 ASP Web 窗体转换为用户控件
【发布时间】:2009-11-09 17:07:03
【问题描述】:
我有一个名为 Search.aspx 的 Web 表单页面。我需要在其他地方呈现表单,所以我想将 Web 表单转换为用户控件,但我的 Search.aspx.cs 继承了一个自定义 Page 类,该类继承了 System.Web.UI.Page。由于我的 C# 不支持多重继承,因此我无法在我的用户控件搜索类 (Search.ascx.cs) 类中继承我的自定义 Page 类和 System.Web.UI.UserControl 类。
我想知道是否有办法解决这个问题,而不必为 UserControl 创建第二个自定义页面类。
提前致谢。
【问题讨论】:
标签:
c#
.net
asp.net
user-controls
webforms
【解决方案1】:
搜索表单需要从继承的自定义 Page 类中获得什么?您可以设计您的搜索表单,使其只是一种输入形式和公开输入值的公共属性。如果没有关于自定义 Page 类提供什么价值的更多信息,很难说最佳答案是什么。通常,控件不需要对其父页面了解太多。
【解决方案2】:
取决于架构的其余部分。
最简单的方法是将继承更改为 UserControl。如果您的自定义 Page 基类中缺少某些方法,您可以在 UserControl 自定义基类中复制它们。
如果您想保持 DRY,请将这些自定义方法重构为一个类,该类将这些方法提供给任何 Page 或 UserControl 类。您将使用组合而不是继承,如果您的继承树变得很深,这可能是更好的选择。
另一种选择是从您的自定义 Page 类中提取接口。 我认为这不是一个好主意。首先,您很可能不需要将 Pages 和 UserControls 完全相同(多态性)。其次,您仍然必须在两个自定义类中实现接口,因此无论如何您最终都会破坏 DRY。