2009-10-05 51 views
1

我的應用程序有10個產品頁面上列出的產品。當用戶點擊這些產品中的一個時,他們會被引導到該產品的詳細信息頁面。在ASP.NET MVC中創建DetailsView傳呼機

我想在詳細信息頁面上實現下一頁/上一頁的尋呼機,該頁面可將您帶到下一個或上一個產品,而無需返回到產品頁面。

我假設我必須編寫強類型視圖數據,該數據基於所選產品返回產品對象以及下一個和前一個產品的標識符(本例中爲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 2009-10-05 22:43:16

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 2009-10-06 12:28:52

+0

我認爲我們在這裏有一個平行宇宙的僵局:你贏了。 – rasx 2009-10-06 18:25:49

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); 
    } 
}