【问题标题】:Unable to get a total count of items in the model in the ASP.NET MVC view无法在 ASP.NET MVC 视图中获取模型中的项目总数
【发布时间】:2014-09-11 11:31:27
【问题描述】:

我正在使用以下代码来呈现寻呼机:

@Html.BootstrapPager(Request.QueryString("Page"), Function(index) Url.Action("Index", "Posts", New With {.page = index}), 14000, System.Web.Configuration.WebConfigurationManager.AppSettings("PageSize"), 15)

我的问题是,如果我使用Model.Count 代替14000,那么我只会得到一页记录,因为我使用的是跳过并在存储库中提取需要的记录。如何在视图中访问已发布记录的总数,以便我不必立即将值硬编码到视图中?

原始寻呼机代码is here。我将它转换为 VBNET 正在使用它。如果记录计数是硬编码的,它工作正常。

这是回购:

Dim posts As IEnumerable(Of PostSummaryDTO)
        Using db As BetterBlogContext = New BetterBlogContext
            posts = db.be_Posts.OrderByDescending(Function(x) x.DateCreated).Select(Function(s) New PostSummaryDTO With {.Id = s.PostRowID, .PostDateCreated = s.DateCreated, .PostSummary = s.Description, .PostTitle = s.Title, .IsPublished = s.IsPublished}).Skip((Page - 1) * PageSize).Take(PageSize).ToList()
            Return posts.ToList
        End Using

【问题讨论】:

  • Model.Count 如何设置?听起来您需要另一种 repo 方法来获取实际的记录数。

标签: vb.net model asp.net-mvc-5 paging entity-framework-6.1


【解决方案1】:

您需要在较低层使用两种不同的方法 - 一种获取总计数,另一种获取所需页面 - 然后从控制器调用它们,将模型中的两个结果都传递给视图。因此,模型不能是记录的集合;它必须是具有记录集合属性和计数属性的对象。或者使用ViewBag 来传递计数。

我们在我的办公室做的是有一个服务层来包含业务逻辑和存储库来处理数据访问。存储库中有一个方法可以返回IQueryable,它提供对特定表的所有记录的访问。然后,服务中有一个或多个方法调用该存储库方法并以不同的方式使用它。在这种情况下,服务中可能存在GetTotalCount 方法和GetPage 方法。两者都会调用相同的存储库方法来获得相同的IQueryable,然后第一个方法会调用Count 的结果,而第二个方法会调用SkipTake。由于SkipTake 不会强制执行查询,因此您还可以在第二种方法中调用ToArray 等。该服务还可能有一个 GetRecord 方法,您将传递一个 ID 并在内部调用 FirstOrDefault 以获取具有匹配 ID 的单个记录。如果需要,您可以将服务和存储库整合到一个类中,但我建议将业务逻辑与数据访问分开。

【讨论】:

  • 我有一个服务层来处理额外的过滤,所以我会进行另一个调用来获取计数。
  • 我无法让 IQueryable 工作,所以只是在 repo 中创建了另一个方法,将记录计数作为整数并将其传递到视图中。我会在其他时间再次尝试 IQueryable。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多