Создание пейджера DetailsView в ASP.NET MVC - PullRequest
1 голос
/ 06 октября 2009

В моем приложении 10 продуктов, перечисленных на странице продуктов. Когда пользователь щелкает один из этих продуктов, он перенаправляется на страницу сведений об этом продукте.

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

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

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

    public string NextSKU
    {
        get;
        set;
    }

    public string PreviousSKU
    {
        get;
        set;
    }
}

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

Спасибо

Ответы [ 3 ]

1 голос
/ 08 декабря 2011

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

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

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

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

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

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

Очевидно, что вам также придется учитывать, как скрыть кнопку «предыдущий / следующий», когда индекс выходит за границы. но это только начало.

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);
    }
}
0 голосов
/ 06 октября 2009

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

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

... тогда вы можете использовать out<a href="/646193/datalist-peidzhing-s-linq">1</a>, чтобы выбрать средний. Вы также можете кэшировать customers. Эта форма на самом деле взята из другого ответа stackoverflow.com .

0 голосов
/ 06 октября 2009

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

...