假设我有一个包含数千个组织的列表,并且用户需要能够选择其中一个。该列表太大而无法在页面加载时填充到下拉列表中,用户通常知道他们想要什么,但这不是组织名称的第一部分。也就是说,他们知道“Collections”,但不知道该组织的确切名称是“Department of Collections”。所以用户将需要/想要输入一些信息。
使用某种自动完成文本框很容易,但我不想让用户输入随机文本——他们必须明确选择其中一个组织。
最好的解决方案是什么?
假设我有一个包含数千个组织的列表,并且用户需要能够选择其中一个。该列表太大而无法在页面加载时填充到下拉列表中,用户通常知道他们想要什么,但这不是组织名称的第一部分。也就是说,他们知道“Collections”,但不知道该组织的确切名称是“Department of Collections”。所以用户将需要/想要输入一些信息。
使用某种自动完成文本框很容易,但我不想让用户输入随机文本——他们必须明确选择其中一个组织。
最好的解决方案是什么?
IMO 我会将 UI 简化为:
然后,我将根据搜索字符串填充视图并让用户选择有效项目或优化搜索
IMO 具有类似自动完成功能的功能,您最终将编写大量解析代码来获取字符串,然后可能会考虑服务器端负载...
HTH。
另外检查“多面导航”是否是您需要的。参考:http ://www.alistapart.com/articles/design-patterns-faceted-navigation/
所以在我看来,你的主要挑战是
我会说呈现一个选择器控件,它与您的设计的其余部分相匹配,并在其上方有一个搜索框。然后,您应该对列表进行分页,因为会有很多页面包含这么多元素,表明用户绝对应该使用搜索。搜索本质上类似于自动完成,但它不会更改文本,而是更改分页列表的内容。如果您逐个字符地执行此操作(或使用Reactive Extensions进行节流),很明显您只是在过滤列表以使选择更容易。
是否可以将您的列表构造得更像一棵树,以便它不是单个列表。例如,您能否有一个像“政府部门”这样的分组,然后在其中添加收藏部门。然后要求您的用户首先选择顶级分组,然后向他们显示该组中较短的组织列表?
在我看来,您的数据列表似乎真的应该在数据库中,或者至少存储在远离 UI 的地方。无论它真正存储在哪里,为每个条目放置一个关键字,例如“收藏”。关键字列表可以作为自动完成功能的一部分提供。然后单独搜索关键字。
如果您可以将项目划分为类别,那么使用某种树控件会有所帮助吗?
因此,当用户单击某个节点时,您只会加载该节点中的项目。等等。
我会把它分成两条路...
为键入正确标题的人(即收藏部门)使用自动完成文本框;和一个单独的搜索按钮来搜索可能的匹配项。搜索按钮会将您带到结果页面以选择所需的选项。此功能类似于 MSDN 上的搜索工作方式。
您可以使用CustomValidator来确保 TextBoxes 内容包含在您的集合中。
您可以使用 Ajax 自动完成控件:http ://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AutoComplete/AutoComplete.aspx 。如果用户输入了一定数量的字符,您可以选择仅进行查找。
您将创建一个静态 Web 方法来查询集合(您可以使用 LINQ)并返回匹配的组织。
之后您显然需要验证文本框输入。
最初,树形视图听起来很酷,但您确定单一分类会将数据减少为可管理的集合吗?如果 80% 的数据被归类为“政府部门”,这并没有真正的帮助。
问题是您需要允许用户快速将大列表拆分为更易于使用的较小集合的标准。此外,应该有足够的灵活性来应对数据的变化。
我建议使用像 iTunes 这样的标记模式。在我的图书馆中,“摇滚”描述了我收藏的 80%——但对于随机洗牌之类的东西仍然是一个有用的分类。我还可以堆叠标签,这样我就可以使用genre="rock"、decade="1990" 并快速筛选出我感兴趣的数据。
在 UI 中,我推荐一个允许用户应用“过滤器”的部分,这只不过是为标签选择特定值。将列表分成几页,让他们查看潜在匹配项的总数。
场景: - 导航到屏幕 XYZ 并查看有 10,000 家公司可供选择 - 单击“分类”并选择“政府部门”,列表更新以表明现在有 1,000 家。- 单击“区域”并选择“南部”,然后查看我的列表下降到 200。 - 按名称对列表进行排序,然后选择(或滚动浏览,无论如何)