【问题标题】:Creating a DetailsView Pager in ASP.NET MVC在 ASP.NET MVC 中创建 DetailsView 分页器
【发布时间】:2011-12-09 02:44:20
【问题描述】:

我的应用程序在产品页面上列出了 10 种产品。当用户单击其中一种产品时,他们会被定向到该产品的详细信息页面。

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

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

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

    public string NextSKU
    {
        get;
        set;
    }

    public string PreviousSKU
    {
        get;
        set;
    }
}

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

谢谢

【问题讨论】:

    标签: asp.net-mvc pagination paging


    【解决方案1】:

    我认为您可能需要做的是通过会话对象将整个 SKU 列表传递到详细信息页面。

    详细信息页面当然会通过查询字符串加载点击的项目。

    然后你会有一个下一个/上一个按钮。单击时,他们需要根据详细信息视图中的当前项目确定下一个/上一个项目。

    所以基本上将您的项目加载到会话对象中。您可以在“图库”页面加载时执行此操作,或者在用户单击实际链接时执行此操作。

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

    【讨论】:

      【解决方案2】:

      Thomas,没有必要为此编写 LINQ 语句。有一个名为 JQGrid 的 MVC 兼容控件可以完成这项工作。 http://www.trirand.com/blog/

      【讨论】:

      • 我应该指出,但是,您必须使模型数据与 json 兼容才能使其工作——这就是控件知道如何迭代的方式。
      【解决方案3】:

      我建议将.Skip().Take() 扩展为IEnumerable

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

      ...那么您可以使用out@987654321@ 来定位中间那个。您可能还想缓存customers。这个表单其实来自another stackoverflow.com answer

      【讨论】:

      • 问题是我没有页码,因为我没有进行分页。我只有一个 SKU 编号,我必须查询该 SKU 的数据库以显示详细信息以及获取产品前后的 SKU。
      猜你喜欢
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多