Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将ASP Web表单转换为用户控件_C#_.net_Asp.net_User Controls_Webforms - Fatal编程技术网

C# 将ASP Web表单转换为用户控件

C# 将ASP Web表单转换为用户控件,c#,.net,asp.net,user-controls,webforms,C#,.net,Asp.net,User Controls,Webforms,我有一个叫做Search.aspx的网页表单。我需要在其他地方呈现表单,因此我希望将Web表单转换为用户控件,但我的Search.aspx.cs继承了一个自定义页面类,该类继承System.Web.UI.Page。由于I C#不支持多重继承,因此我无法在用户控件搜索类(Search.ascx.cs)中同时继承自定义页面类和System.Web.UI.UserControl类 我想知道是否有一种方法可以解决这个问题,而不必为UserControl创建第二个自定义页面类 提前感谢。搜索表单需要从继承

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

我想知道是否有一种方法可以解决这个问题,而不必为UserControl创建第二个自定义页面类


提前感谢。

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

取决于体系结构的其余部分

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

如果您试图保持干燥,请将这些自定义方法重构为一个类,该类将这些方法提供给任何页面或UserControl类。您将使用组合而不是继承,如果您的继承树很深,这可能是一个更好的方法

另一个选项是从自定义页面类中提取接口我认为这不是一个好主意。首先,您很可能不需要对页面和用户控件进行完全相同的处理(多态性)。第二,您仍然必须在两个自定义类中实现接口,因此无论如何,最终都会失败