在ASP.NET中将控制权传递给父/基类的最佳方式
本文关键字:基类 方式 最佳 NET ASP 控制权 | 更新日期: 2023-09-27 17:50:41
我有一个抽象的BasePage类,每个Page类都继承它。除了核心功能外,我希望BasePage涵盖几乎所有派生类都实现的重复任务。要做到这一点,BasePage类必须保存对派生类中定义的控件(下拉列表,gridview,菜单…)的引用。
我的问题是什么是传递控制引用定义在派生页类父类的最好方法?
下面没有一个真正给出"最佳"解决方案:
-
基页声明变量的名称与派生类上控件的Id相同。这迫使ASP。. NET设计器不得在派生类上重新创建控件。(我不喜欢这样,因为派生类被迫知道并使用硬编码的名称)
-
创建抽象属性并强制派生类返回控件引用(CON:在某些情况下派生类可能不包含这样的控件)
-
将控件作为函数调用参数传递(CON:仍然需要重复的函数调用代码。函数本身甚至不需要在BasePage上
一种更面向对象的方法是扩展控件类(下拉列表、网格视图、菜单…)并为重复任务添加方法。
如果您必须在BasePage中定义控件,那么您可以在BasePage中为这些控件创建一个虚拟属性。任何想要使用它的派生页面都将重写此控件并提供所需的控件。
public class BasePage : System.Web.UI.Page
{
protected virtual DropDownList MyDropDown { get; set; }
protected void PopulateList()
{
if (MyDropDown != null)
MyDropDown.Items.Add("option");
}
}
public partial class MyPage : BasePage
{
protected override DropDownList MyDropDown
{
get
{
return DerivedClassList;
}
set
{
base.DerivedClassList = value;
}
}
}