构建打开详细信息视图的链接,以便它具有下一个和上一个参数,其中包含前一个/后一个元素的列表以及当前元素的ID。如果你通过索引来遍历列表模型数据而不是使用foreach来做迭代,那么最简单的做法就是 - 这种方式你可以在找到它们的id时引用相对于当前元素的上一个/下一个元素。确保正确处理第一个和最后一个元素。
在您的控制器操作中,下一个/上一个参数应该是可以为空的 - 如果您没有从列表中获取,则不显示下一个/上一个按钮。您可以“发布”详细信息视图操作,并将额外的参数放在表单中而不是网址中,这样用户仍可以为网址添加书签。请注意,这有它自己的问题,但浏览器的后退/前进按钮和刷新。
<% for (int i = 0, len = Model.Count(); i < len; ++i)
{
Foo model = Model.ElementAt(i);
string prev = i == 0 ? null : string.Join(",", Model.Take(i).Select(m => m.ID.ToString()).ToArray());
string next = i == (len - 1) ? null : string.Join(",", Model.Skip(i).Select(m => m.ID.ToString()).ToArray())
%>
<% using (Html.BeginForm("Details","Bar", new { id = model.ID })) { %>
<%= Html.AntiForgeryToken() %>
<%= Html.Hidden("Prev", prev) %>
<%= Html.Hidden("Next", next) %>
<input type="submit" value="Details" />
<% } %>
<% } %>
我可能也使用一些jQuery来改变输入按钮用于提交一个点击事件处理程序的封闭形式的链接,但是这只是我的UI偏好。
非常感谢tvan,但是这不仅仅是让我从选中的记录中获得一个动作吗?在点击下一个或上一个按钮进入下一个记录后,我将如何计算这个新记录中的下一个按钮URL? – Tommy 2010-03-09 16:06:17
没有想过 - 将其作为ID列表提供。如果我有机会,我会更新代码,但修改它不应该很难。详情页面必须做同样的事情。 – tvanfosson 2010-03-09 16:11:27
谢谢tvan!我会继续,并标记为回答 – Tommy 2010-03-09 16:21:14