从Asp.Net MVC视图转到下一条记录

时间:2013-11-27 18:59:38

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

几个月前我开始在asp.net MVC工作。我现在在C#中使用MVC4和EF5.0。

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

问题:在控制器操作中,我希望能够根据我在视图中看到的实际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)。

欢迎任何帮助,建议和提示。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您还没有告诉它返回单个项目。如果在LINQ查询的末尾添加.First()之类的内容,那么你应该很好。

答案 2 :(得分:0)

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