【问题标题】:MVCGrid.net - Grid doesn't page results, shows all records and pager alsoMVCGrid.net - 网格不分页结果,也显示所有记录和寻呼机
【发布时间】:2017-10-20 14:12:00
【问题描述】:

正在显示的网格已启用分页器,但显示所有记录而不分页。也显示寻呼机。 RegisterGrid() 方法的代码如下:-

public static void RegisterGrids()
        {
            GridDefaults defaultSet1 = new GridDefaults()
            {
                Paging = true,
                ItemsPerPage = 5,
                NoResultsMessage = "Sorry, no results were found"
            };

            MVCGridDefinitionTable.Add("grdFiles", new MVCGridBuilder<FilesModel>(defaultSet1)
            .WithAuthorizationType(AuthorizationType.AllowAnonymous)
            .AddColumns(cols =>
            {
                cols.Add("FileName")
                    .WithValueExpression(p => p.Name.ToString());
                cols.Add("LastModified").WithHeaderText("LastModified")
                    .WithValueExpression(p => p.LastModified.ToString());
                cols.Add("Size").WithHeaderText("Size")
                    .WithValueExpression(p => p.Size.ToString());
            })
            .WithRetrieveDataMethod((context) =>
            {
                var res = DisplayFiles();
                return new QueryResult<FilesModel>()
                {
                    Items = res,
                    TotalRecords = res.Count // if paging is enabled, return the total number of records of all pages
                };
            })
            );
        }

查看代码是:

@model IEnumerable<FileViewerWeb.Models.FilesModel>

@using MVCGrid.Web;

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="well well-lg" style="padding-top:10px">
    <h2>Explore Uploaded Files</h2>
</div>

@Html.MVCGrid("grdFiles")

控制器代码:-

public ActionResult Index()
{
return View();
}

【问题讨论】:

    标签: asp.net-mvc mvcgrid.net


    【解决方案1】:

    将生成列表的方式更改为查询,然后最后通过ToList() 传递查询

    var result = new QueryResult<FilesModel>();
    var query = db.FilesModel.AsQueryable();
    

    你错过了代码

    if (options.GetLimitOffset().HasValue)
    {
        var limitOffset = options.GetLimitOffset().Value;
        var limitRowCount = options.GetLimitRowcount().Value;
        query = query
            .Skip(limitOffset)
            .Take(limitRowCount);
    }
    

    最后,在返回使用点

    result.Items = query.ToList();
    result.TotalRecords = result.Items.Count();
    return result;
    

    【讨论】:

    • result.TotalRecords = result.Items.Count(); ? 这是不正确的。它应该类似于result.TotalRecords = unfilteredQuery.Count();,因为分页器会显示 50 个中的 1 个(总计:50)而不是 50 个中的 1 个(总计:1234)。
    【解决方案2】:

    当你使用skip时,你必须首先使用orderby。

    if (options.GetLimitOffset().HasValue)
    {
        var limitOffset = options.GetLimitOffset().Value;
        var limitRowCount = options.GetLimitRowcount().Value;
        query = query.OrderBy(c=>c.name) //or add any column you prefer to order the list
            .Skip(limitOffset)
            .Take(limitRowCount);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2015-01-07
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多