2009-10-05 2 views
1

Мое приложение имеет 10 продуктов, перечисленных на странице продуктов. Когда пользователь нажимает на один из этих продуктов, он направляется на страницу сведений для этого продукта.Создание пейджера DetailsView в ASP.NET MVC

Я хотел бы реализовать следующий/предыдущий пейджер на странице сведений, которая приведет вас к следующему или предыдущему продукту, не возвращаясь на страницу продуктов.

Я предполагаю, что мне нужно написать строго типизированные данные просмотра, которые возвращают как объект Product, так и идентификаторы (в этом случае SKU) для следующего и предыдущего продукта на основе выбранного продукта.

public class ProductViewData 
{ 
    public Product product 
    { 
     get; 
     set; 
    } 

    public string NextSKU 
    { 
     get; 
     set; 
    } 

    public string PreviousSKU 
    { 
     get; 
     set; 
    } 
} 

Вопрос в том, как я могу эффективно использовать предыдущий и следующий идентификаторы, используя LINQ?

Благодаря

ответ

0

Томас, нет необходимости писать заявление LINQ для этого. Для этого называется JQGrid, совместимый с MVC, который выполнит эту работу. http://www.trirand.com/blog/

+0

Следует, однако, указать, что вы должны сделать ваши данные модели json-совместимыми, чтобы это работало - вот как контроль знает, как итерации. – Austin

0

я предлагаю .Skip() и .Take() Расширения для IEnumerable:

var out = customers.Skip((pageNumber - 1) * 3).Take(3).ToList<Customer>(); 

... то вы можете использовать out 1 целевой средней. Вы также можете захотеть кэшировать customers. Эта форма фактически исходит от another stackoverflow.com answer.

+0

Проблема в том, что у меня нет pagenumber, так как я не делаю пейджинг. Все, что у меня есть, это номер SKU, и я должен запросить базу данных для этого SKU для отображения деталей, а также получить SKU продукта до и после. – Thomas

+0

Я думаю, что у нас здесь паралельная вселенная: вы побеждаете. – rasx

1

Я думаю, что вам может понадобиться передать весь список SKU на страницу сведений через объект сеанса.

Страница сведений загрузила бы щелкнутый элемент, конечно, через строку запроса.

Тогда у вас будет кнопка Next/Previous. Когда вы нажимаете, им нужно будет выяснить, какие элементы будут дальше/предыдущими, исходя из текущего элемента в представлении деталей.

Так что в основном загружайте свои объекты в объект сеанса. Вы можете сделать это, когда загружается страница «галерея» или когда пользователь нажимает на фактическую ссылку.

private List<Item> ListOfItems{ 
     get { return Session["items"] as List<Story>; } 
     set { Session["items"] = value; } 
    } 

, то в окне просмотра данных найдите currentindex, а затем предыдущий и следующий индекс.

Очевидно, вам также необходимо учесть скрытие кнопки prev/next, когда индекс выходит за пределы. но это начало.

public ActionResult Details(long? id) { 
    List<Item> items = ListOfItems; 

    using (Entities df = new Entities()) { 
     Item i = df.Item.FirstOrDefault(st => st.ID == id); 
     int currentIndex = items.FindIndex(st => st.ID == id); 

     Item prevItem = items[currentIndex - 1]; 
     Item nextItem = items[currentIndex + 1]; 
     ViewData["previous"] = prevItem.ID.ToString(); 
     ViewData["next"] = nextSItem.ID.ToString(); 
     return View(i); 
    } 
}