2009-10-05 57 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); 
    } 
}