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

标签 c# asp.net .net

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

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

以下都不是真正的“最佳”解决方案:

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

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

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

最佳答案

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

如果您必须在 BasePage 中定义控件,那么您可以创建一个 virtual property对于这些在 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;
        }
    }
}

关于c# - 将控制权传递给 ASP.NET 中的父类/基类的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168417/

相关文章:

c# - 如何在 visual studio WPF 中绑定(bind) "publish version"属性

c# - 如何在 .net 中打开 .xlt 文件?

asp.net - 在重定向上传递消息以在ASP.NET MVC中查看

c# - Listview ItemSelectionChanged,如何取消/撤消

.net - Reactive Extensions是开源的吗?

c# - 处理器线程 C#

c# - 如何将时间戳值参数从 C# 传递到 SQL

c# - 在 C# 中使用字符数组 (char[]) 而不是字符串

javascript - 在 JavaScript 中显示警报消息时避免页面提交

c# - 要列出的字符串。它的工作方式不同吗?