Создайте ссылку, которая открывает подробное представление, чтобы у нее были следующий и предыдущий параметры, содержащие список предыдущих / следующих элементов, а также идентификатор текущего элемента. Вероятно, это проще всего сделать, если вы перебираете данные модели списка по индексу, а не используете foreach - таким образом вы просто ссылаетесь на предыдущий / следующий элемент относительно текущего элемента при поиске их идентификаторов. Убедитесь, что правильно обрабатываете первый и последний элементы.
В вашем действии контроллера следующие / предыдущие параметры должны быть обнуляемыми - если вы не попадете туда из списка, вы не отобразите кнопки «следующий / предыдущий». Вы можете «опубликовать» действие представления сведений и поместить дополнительные параметры в форму, а не URL-адрес, чтобы пользователь все еще мог добавить URL в закладки. Обратите внимание, что у него есть свои проблемы, связанные с кнопкой браузера «назад / вперед» и обновлением.
<% 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 для изменения кнопки ввода на ссылку, которая отправляет вложенную форму с обработчиком события щелчка, но это всего лишь мое предпочтение для пользовательского интерфейса.