4

我有一个抽象的 BasePage 类,每个 Page 类都继承自该类。除了核心功能之外,我希望 BasePage 涵盖几乎所有派生类都实现的重复性任务。然而,要做到这一点,BasePage 类必须保留对在派生类中定义的控件(下拉列表、网格视图、菜单...)的引用。

我的问题是将派生 Page 类中定义的控件引用传递给父类的最佳方法是什么?

以下都没有真正提供“最佳”解决方案:

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

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

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

4

1 回答 1

3

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

如果必须在 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;
        }
    }
}
于 2013-01-05T04:40:41.577 回答