将ASP Web窗体转换为用户控件

时间:2009-11-09 17:07:04

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

我有一个名为Search.aspx的Web表单页面。我需要在其他地方呈现表单,所以我想将Web表单转换为用户控件,但我的Search.aspx.cs继承了继承System.Web.UI.Page的自定义Page类。由于I C#不支持多重继承,因此我无法在我的User Control Search类(Search.ascx.cs)类中继承我的自定义Page类和System.Web.UI.UserControl类。

我想知道是否有办法解决这个问题,而无需为UserControl创建第二个自定义页面类。

提前致谢。

2 个答案:

答案 0 :(得分:1)

继承的自定义Page类需要什么样的搜索表单?您可以设计搜索表单,使其只是一种公开输入值的输入和公共属性形式。如果没有关于自定义Page类提供的值的更多信息,很难说最佳答案是什么。通常,控件不需要了解其父页面。

答案 1 :(得分:1)

取决于架构的其余部分。

最简单的方法是将继承更改为UserControl。如果您在自定义页面基类中缺少某些方法,则可以在UserControl自定义基类中复制它们。

如果您尝试将其保持DRY,请将这些自定义方法重构为为任何Page或UserControl类提供这些方法的类。你将使用组合而不是继承,如果你的继承树变深,这可能是一个更好的路径。

另一种选择是从自定义Page类中提取接口。 我认为这不是一个好主意。首先,您很可能不需要处理您的Pages和您的UserControls完全相同(多态)。其次,您仍然需要在两个自定义类中实现该接口,因此无论如何最终都会破坏DRY。