我的应用程序有10个产品列在产品页面上。当用户点击其中一个产品时,他们会转到该产品的详细信息页面。
我想在详细信息页面上实现下一个/上一个寻呼机,无需返回产品页面即可转到下一个或上一个产品。
我假设我必须编写强类型视图数据,该数据根据所选产品为下一个和上一个产品返回Product对象和标识符(在本例中为SKU)。
public class ProductViewData
{
public Product product
{
get;
set;
}
public string NextSKU
{
get;
set;
}
public string PreviousSKU
{
get;
set;
}
}
问题是,如何以有效的方式使用LINQ获取上一个和下一个标识符?
由于
答案 0 :(得分:1)
我认为您可能需要做的是通过会话对象将整个SKU列表传递到详细信息页面。
详情页面会通过查询字符串加载点击的项目。
然后你会有一个下一个/上一个按钮。点击后,他们需要根据详细信息视图中的当前项目确定下一个/上一个项目。
所以基本上将你的项目加载到会话对象中。您可以在加载“图库”页面时,或者当用户点击实际链接时执行此操作。
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);
}
}
答案 1 :(得分:0)
Thomas,没有必要为此编写LINQ语句。这个叫做JQGrid的MVC兼容控件可以完成这项工作。 http://www.trirand.com/blog/
答案 2 :(得分:0)
我建议将.Skip()
和.Take()
扩展程序设为IEnumerable
:
var out = customers.Skip((pageNumber - 1) * 3).Take(3).ToList<Customer>();
...然后你可以使用out1
来定位中间人。您可能还想缓存customers
。此表单实际上来自another stackoverflow.com answer。