代码之家  ›  专栏  ›  技术社区  ›  Peter Alexandr Nikitin

如何为从同一抽象基类继承的不同具体类加载不同的ASP.NET控件

  •  0
  • Peter Alexandr Nikitin  · 技术社区  · 15 年前

    假设您有一个抽象基类 Task 这是用户可以完成的任务。有两个具体任务: SimpleTask ChecklistTask . 如果您希望(ASP.NET)UI根据任务类型显示不同的控件,该怎么办?

    在WPF中,您可以使用DataTemplates,但是在ASP.NET中有什么好方法可以做到这一点呢?顺便说一下,我们试图避免使用switch语句。我们还有其他一些带有长switch语句的代码,它们开始时很小,但随着时间的推移而增长。这就是我们想要避免的。

    有没有这样的设计模式?我们不能让 任务 类“知道”UI类,因为它们是域类。或者是我们能做的最好的交换声明(如有必要,隐藏在单独的“工厂”类中)?

    3 回复  |  直到 15 年前
        1
  •  1
  •   kyoryu    15 年前

    在某些地方,必须知道如何将任务子类映射到UI控件。时期。唯一的问题是把这些知识放在哪里。

    1. 任务本身
    2. 一个类,可以使用从任务中检索到的数据来查找适当的控件
    3. 实际给出任务的代码(为什么不能给出UI控件?)
    4. 一些代码可以通过属性和反射将任务类映射到UI控件。
    5. 其他类型的元数据。
        2
  •  0
  •   Dewfy    15 年前

    假设simpletask.ascx中实现了simpletask,checklistask.ascx中实现了checklistask。然后放入metainfo(以任何方式创建特定控件)中.ascx所在的路径(例如:“~/mycontrols/simpletask.ascx”)。

    最后:用templateControl.loadcontrol嵌入控件

        3
  •  0
  •   Mustafa Magdy    15 年前

    我喜欢任何设计模式中的“隔离”部分,我认为您应该为简单任务和检查表任务进行两种UI实现,它们本身只是一个黑盒,然后在另一个控件或页面上您可以使用 ItemTemplate 如果你要列出一些任务 普通项 您只需设置一个条件来检查任务的类型,然后在此页面上调用一个方法来呈现正确类型的HTML。( Simple Checklist )

    推荐文章