在ASP.NET中将控制权传递给父/基类的最佳方式

本文关键字:基类 方式 最佳 NET ASP 控制权 | 更新日期: 2023-09-27 17:50:41

我有一个抽象的BasePage类,每个Page类都继承它。除了核心功能外,我希望BasePage涵盖几乎所有派生类都实现的重复任务。要做到这一点,BasePage类必须保存对派生类中定义的控件(下拉列表,gridview,菜单…)的引用。

我的问题是什么是传递控制引用定义在派生页类父类的最好方法?

下面没有一个真正给出"最佳"解决方案:

  1. 基页声明变量的名称与派生类上控件的Id相同。这迫使ASP。. NET设计器不得在派生类上重新创建控件。(我不喜欢这样,因为派生类被迫知道并使用硬编码的名称)

  2. 创建抽象属性并强制派生类返回控件引用(CON:在某些情况下派生类可能不包含这样的控件)

  3. 将控件作为函数调用参数传递(CON:仍然需要重复的函数调用代码。函数本身甚至不需要在BasePage上

在ASP.NET中将控制权传递给父/基类的最佳方式

一种更面向对象的方法是扩展控件类(下拉列表、网格视图、菜单…)并为重复任务添加方法。

如果您必须在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;
        }
    }
}