asp.net 从非常大的列表中选择项目

iibxawm4  于 2023-10-21  发布在  .NET
关注(0)|答案(9)|浏览(116)

假设我有一个几千个组织的列表,用户需要能够选择其中之一。该列表太大,无法在页面加载时填充,用户通常知道他们想要什么,但它不是组织名称的第一部分。也就是说,他们知道“收藏”,但不知道该组织的确切名称是“收藏部”。所以用户需要/想要输入一些信息。
使用某种类型的自动完成文本框很容易,但我不想允许用户输入随机文本-他们必须明确选择一个组织。
最好的解决方案是什么?

carvr3hs

carvr3hs1#

IMO我将简化UI为:

  • 用于输入字符串的文本框
  • 一个下拉菜单,用于设置过滤器选项,如:“包含|始于|以”
  • 一个“查找”按钮

然后,我将根据搜索字符串填充一个视图&让用户选择有效项或细化搜索
在我看来,使用自动完成之类的东西,你最终会编写大量的解析代码来获取字符串,然后可能会有服务器端的负载考虑。
HTH。
在额外的检查,如果'分面导航'是你需要的东西。参考号:http://www.alistapart.com/articles/design-patterns-faceted-navigation/

eqfvzcg8

eqfvzcg82#

所以在我看来你的主要挑战是
1.表示用户需要从列表中选择一个组织(并且仅从列表中选择)。
1.表示名单上有很多组织。
1.为用户提供一些快速找到列表中的组织的方法。
我会说,提出一个选择器控件,适合与其余的设计与搜索框就在它上面。然后你应该对列表进行分页,因为会有很多页面包含这么多元素,表明用户肯定应该使用搜索。搜索本质上就像自动完成一样,但不是找到的选项改变文本,而是改变分页列表的内容。如果您逐个字符地执行此操作(或使用Reactive Extensions进行节流),很明显,您只是在过滤列表以使选择更容易。

hkmswyz6

hkmswyz63#

您可以使用CustomValidator来确保TextBox内容包含在您的集合中。

x8goxv8g

x8goxv8g4#

您可以使用Ajax AutoComplete控件:http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AutoComplete/AutoComplete.aspx。您可以选择仅在用户输入了一定数量的字符时执行查找。
您将创建一个静态Web方法来查询集合(可以使用LINQ)并返回匹配的组织。
显然,您需要在之后验证文本框输入。

bzzcjhmw

bzzcjhmw5#

有没有可能把你的列表构造得更像一棵树,这样它就不是一个单一的列表了。例如,你可以有一个像“政府部门”这样的分组,然后添加收藏部门。然后要求用户首先选择顶级分组,然后向他们显示该组中组织的较短列表?

ctzwtxfj

ctzwtxfj6#

在我看来,你的数据列表真的应该放在数据库中,或者至少远离UI存储。无论它真正存储在哪里,为每个条目放置一个关键字,比如“集合”。关键字列表可以作为自动完成功能的一部分。然后单独搜索关键字。

fdbelqdn

fdbelqdn7#

如果你可以将项目分类,使用某种树控件会有帮助吗?
因此,当用户单击一个节点时,您只加载该节点中的项目。等

5n0oy7gb

5n0oy7gb8#

我把它分成两条路...
使用自动完成文本框,为键入正确标题的人(即,收藏部);和一个单独的搜索按钮来搜索可能的匹配项。搜索按钮将带您到结果页面选择所需的选择。此功能类似于在MSDN上搜索的工作方式。

mznpcxlj

mznpcxlj9#

最初,树视图听起来很酷,但是您确定单个分类将数据减少到可管理的集合中吗?如果你80%的数据被归类为“政府部门”,这并没有真正帮助的事情。
问题是,您需要的条件允许用户快速地将一个大列表拆分为更容易使用的较小集合。此外,应该有足够的灵活性来应对数据的变化。
我建议使用像iTunes这样的标记模式。在我的图书馆里,“摇滚”描述了我80%的收藏--但对于像随机 Shuffle 这样的东西来说,它仍然是一个有用的分类。我也有能力堆叠标签,所以我可以使用genre=“rock”,decade=“1990”,并快速筛选我的数据,以任何感兴趣的。
在UI中,我推荐一个允许用户应用“过滤器”的部分,这只不过是为标签选择特定的值。把列表分成几页,让他们看到潜在匹配的记录。
场景:-导航到屏幕XYZ,看到有10,000家公司可供选择-单击“分类”,选择“政府部门”,列表更新,表明现在有1,000家。- 点击“地区”并选择“南方”,看到我的名单下降到200。- 按名称排序列表,然后选择(或滚动浏览,无论如何)

相关问题