0

例如,假设我有 3 个可能的项目状态,

  1. 打开
  2. 关闭
  3. 不活跃

假设我创建了两个项目,一个状态为“Open”,另一个状态为“Inactive”。然后,在某个地方,“非活动”状态不再相关,因此通过状态表中的一些“IsActive”标志将其停用。这会导致它不再显示在绑定到 DropDownList 或等效列表的状态列表中。

因此,现在当用户创建新项目时,“添加新”屏幕应该只显示两个活动状态,打开和关闭。但是现在假设他们正在编辑过去的项目,这些项目的状态可能不再处于活动和可用状态。使用哪些技术将非活动状态包含在列表中,至少在它们使用活动状态重新保存之前?(虽然我可能会允许以旧状态重新保存。)

我看到了一些选项,但在我不确定哪个最容易维护之前从未解决过这个问题:

  1. 始终从存储库中选择所有可能的状态,在托管代码中,过滤掉除项目当前设置的状态之外的非活动状态,并使用此列表进行绑定。
  2. 仅从存储库中选择活动状态并在托管代码中将项目状态附加(合并)到列表中,并与此列表绑定。
  3. 将项目的标识符传递给检索状态的 SQL,并使用它将项目的当前状态 UNION 到活动状态列表,并使用此列表进行绑定。

每个似乎实施起来都相当简单,但就像我说的,我对这种情况没有经验。我有几个可以通过管理员可用的维护屏幕激活/停用的项目列表;有些会保持相当静止,但有些会无限增长。当列表变得相当大时,选项 2 和 3 将是最有效的,但选项 1 似乎是最容易实现的。

在这一点上,我更关心时间而不是性能。我正在开发一个 ASP.NET 应用程序、.NET 2.0、C#、用于 UI 的 Web 表单和用于数据层的 (I/My)Batis.NET,它与 SQL Server 数据库通信。

StackOverflow 之神,你会建议我做什么?

4

1 回答 1

0

我通常使用以下方法:

  1. 检索状态值的方法将采用一个可选参数(或在 .NET 2.0~3.5 中具有重载),该参数将指定是否获取非活动值。因此,您可以选择仅获取活动状态或所有雕像 - 根据您的需要使用。

  2. 很多时候,所有状态都被获取,因为屏幕将用于添加/编辑/查看目的。但是,添加/编辑/查看对话框是在客户端启动的,没有任何回发。因此,状态下拉列表将包含所有状态值,并且非活动值将使用特定的 CSS 类进行修饰,以便它们以红色显示以表示处于非活动状态。在添加模式下,js 代码(使用 jquery)将隐藏非活动状态值。当然,后端业务逻辑中有验证来检查状态码的有效性。

于 2011-05-26T04:27:38.167 回答