在ASP.NET MVC中创建DetailsView寻呼机

时间:2009-10-05 21:57:35

标签: asp.net-mvc pagination paging

我的应用程序有10个产品列在产品页面上。当用户点击其中一个产品时,他们会转到该产品的详细信息页面。

我想在详细信息页面上实现下一个/上一个寻呼机,无需返回产品页面即可转到下一个或上一个产品。

我假设我必须编写强类型视图数据,该数据根据所选产品为下一个和上一个产品返回Product对象和标识符(在本例中为SKU)。

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

    public string NextSKU
    {
        get;
        set;
    }

    public string PreviousSKU
    {
        get;
        set;
    }
}

问题是,如何以有效的方式使用LINQ获取上一个和下一个标识符?

由于

3 个答案:

答案 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