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

时间:2013-01-05 03:55:51

标签: c# asp.net .net

我有一个每个Page类继承的抽象BasePage类。除了核心功能之外,我希望BasePage能够覆盖几乎所有派生类都实现的重复性任务。但要执行此操作,BasePage类必须保持对派生类中定义的控件(dropdownlist,gridview,menu ...)的引用。

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

以下所有内容都没有给出“最佳”解决方案:

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

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

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

1 个答案:

答案 0 :(得分:3)

更面向对象的方法是扩展控件类(dropdownlist,gridview,menu ...)并为重复性任务添加方法。

如果必须在BasePage中定义控件,则可以在BasePage中为这些控件创建virtual property。任何想要使用它的派生页面都会覆盖它并提供所需的控制。

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;
        }
    }
}