.NET MVC - список и подробные представления - PullRequest
3 голосов
/ 09 марта 2010

Я думаю, что есть простой ответ на этот вопрос, но по какой-то причине я сегодня попадаю в блок писателей. У меня есть приложение, которое люди могут искать (как любое приложение :)) и генерировать представление списка. Из этого списка вы можете просмотреть детали, которые приведут вас к просмотру деталей. Нет JS, просто другая страница. Но я хотел бы иметь кнопку «Назад» / «Далее» в подробном представлении, чтобы можно было проанализировать набор результатов, не возвращаясь к списку, а затем выбрать следующую запись.

У меня было две идеи сделать это. Идея 1) Иметь следующую / предыдущую запись в моем пользовательском классе. Однако это не сработает, так как поисковый запрос не обязательно будет возвращать последовательные результаты, и мне придется каждый раз запрашивать БД, чтобы получить следующие / предыдущие списки. Идея 2) Иметь список идентификаторов или некоторый пользовательский объект, передаваемый в состоянии просмотра для каждого вида детализации, соответствующего результатам поиска. На этом я не уверен в «накладных расходах», связанных с этим методом.

Есть предложения от SO сообщества?

Спасибо!

1 Ответ

1 голос
/ 09 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...