【问题标题】:Go to next record from Asp.Net MVC view从 Asp.Net MVC 视图转到下一条记录
【发布时间】:2013-11-27 18:59:38
【问题描述】:

几个月前我开始使用asp.net MVC。我目前在 C# 中使用带有 EF5.0 的 MVC4。

-对于这种看似简单的情况,我还没有找到直接的答案和可行的解决方案...

问题:在控制器操作中,我希望能够根据我在视图中看到的实际 ID 移动到下一条记录。我试图在视图中有一个链接或按钮,以导航到下一条记录。请注意,它不是下一个序列号(因为您看到的 ID 是 245,而下一条记录的 ID 可能是 296)。

我已经尝试过这种方法(与另一篇文章类似):

在控制器中编辑方法):

        `// Pk is the id that is passed into the Edit method
        var nextID = db.Customers.OrderBy(i => i.Pk)
                                 .SkipWhile(i => i.Pk != customer.Pk)
                                 .Skip(1)
                                 .Select(i => i.Pk);

        ViewBag.NextID = nextID;
        ...
        ...some other not relevant code...
        ...            
        return View(customer);`

但是, 在视图中 ViewBag.NextID 正在接收:System.Data.Objects.ObjectQuery`1(而不是下一个 id 296)。

欢迎和赞赏任何帮助、建议、提示。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework controller


    【解决方案1】:

    您的 LINQ 查询返回 IQuerable<Customer>。如果要返回单个客户,则必须在查询末尾使用 .First().Single()。但是,您也可以使查询更简单,如下所示:

    var nextID = db.Customers.OrderBy(i => i.Pk).First(i => i.Pk > customer.Pk).Pk;
    

    这将返回大于给定值的第一个客户 ID (Pk)。

    【讨论】:

    • 谢谢 ataravati.. 我可能做错了什么,虽然我收到一个错误:错误 1 ​​'Catalog.Models.Customer' 不包含 'Select' 的定义并且没有扩展方法'可以找到接受“Catalog.Models.Customer”类型的第一个参数的“选择”(您是否缺少 using 指令或程序集引用?)在我之前... Customer customer = db.Customers.Single(c => c.Pk == id); 无论如何,我使用了一些不同的方法和我认为它正在工作......将更新我的问题。再次感谢您的宝贵时间。
    【解决方案2】:

    您还没有告诉它退回单件商品。如果您在 LINQ 查询的末尾添加 .First() 之类的内容,则应该没问题。

    【讨论】:

    • 感谢 Chris 和weldsonandrade。在我的情况下它不起作用,我可能做错了什么,尽管我认为这可能是由跳过时间引起的。无论如何,我使用了一些不同的方法,我认为它正在工作......会更新我的问题。再次感谢您的宝贵时间。
    【解决方案3】:

    我还要补充一点,在结果可能不返回任何内容的环境中,人们常说您应该使用 FirstOrDefault,因为如果不存在结果,它不会爆炸,并且会返回该类型的默认值。另一方面,如果没有找到记录,First() 将抛出异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多