2

我有一个显示表中项目列表的索引视图。每个项目都有一个链接来显示其详细信息(通过 Ajax 加载的另一个部分视图,替换索引视图)。

单击详细信息链接后,用户现在希望查看“下一个项目”或“上一个项目”的详细信息。我们目前有一个返回链接,可以再次获取索引视图......用户可以点击任何项目......但她想要的是更多的可用性。

由于项目列表可能已被过滤,我认为实现此目的的唯一方法是通过 jQuery 或纯 JS。

我正在考虑使用一些隐藏字段来存储所有项目的 ID……而不是存储在索引视图中(一旦访问详细信息它就会消失),以便能够从详细信息中访问它并创建 Back Next 链接。但它感觉很脏......而且仅列出 ID 是不够的,因为我应该跟踪哪个是当前的,以便查看哪些是下一个和上一个项目。所以......可能是一个JSON可以做到这一点。

在客户端存储列表的任何建议或其他方法?该列表可能有 10 到 200 个项目,一旦我再次过滤索引视图或通过其他事件,这些项目将被刷新。

4

2 回答 2

1

好吧,您可以显示详细信息的覆盖而不是替换索引视图,在这种情况下,当用户单击上一个/下一个时,您会告诉索引视图层:“听着,我正在显示 x,但用户想要看到 x+1,所以请用 x+1 代替我”

于 2013-09-12T12:44:38.997 回答
1

我可以看到几种方法。

  1. 就像 TheZuck 说的那样,不要导航到详细信息页面,而是使用内容为详细信息页面的对话框或模态窗口。这样,当用户希望导航时,您可以使用 JavaScript 从索引页面访问值。我不喜欢这个想法,因为它将您的导航逻辑与可能更改的渲染视图内容联系起来。

  2. 您可以从索引页面保留所需的 id,并将它们传递到详细信息页面。这样做的结果是为您更改的代码相对较少。不利的一面是,您将在每个导航请求中发布和检索这些 ID。

  3. 您可以像 #2 那样做,但需要将导航控件与详细信息内容本身分开。如果您将详细信息推送到局部视图中,您现在可以使用 AJAX 帮助器连接您的导航控件。单击前进将通过向控制器中的 an 发出 POST 或 GET 将您带到本地列表中的下一个 id,该ActionResult控制器将返回绑定到该 id 数据的局部视图。我最喜欢这种方法,因为它不会通过每个详细信息导航来往返 id,并且不需要大量自定义 javascript 来从呈现的页面访问 id。它还使您有机会使用加载面板,以防检索数据需要一些时间来检索。

顺便说一句:如果您真的不喜欢将您的 id 存储在隐藏的输入字段或 javascript 变量或列表中,您可以随时使用,Session但如果您处于没有粘性会话的负载平衡环境中,请小心。这样,您就可以在服务器端访问当前过滤的结果。您的导航请求只会发送当前 ID 和所需的导航方向。在您的控制器中,只需拉动会话,查找 ID 并将您的指向向前或向后移动(小心环绕,否则确保您有办法不呈现会导致环绕的导航按钮)。

在这些选择中,我喜欢#3 最好的 UX,特别是如果细节太大而无法在选项 #1 中的小模态或对话框中很好地呈现时。它也可能是响应速度最快的,并且假设您应用了备用,您可以访问列表的 POCO 表示,而不是在 JavaScript 中进行序列化和反序列化。如果详细信息页面太小以至于可以轻松放入对话框或模式窗口,我会考虑#1。它可以像选项 #1 一样响应,并且您仍然可以使用 side 来避免在 JavaScript 中操纵 id。

我降低选项 #3 的优先级的唯一原因是我们的 UX 人员不断拒绝客户对显示数据的“弹出窗口”的请求。她讨厌他们。我还没有弄清楚它是否是个人的,或者是因为 UX 最佳实践为这个决定提供了依据,但这是我从未擅长的事情,所以我没有兴趣去发现!

于 2013-09-12T20:26:39.513 回答