asp-net Telerik 网格未填充

asp-net Telerik grid not getting populated

在 asp.net MVC 页面中我有这个网格

    <div>
    @(Html.Kendo().Grid<KerberosTest.Models.Bench>()
.Name("grid")
.Columns(columns =>
{
    columns.Bound(p => p.id);
    columns.Bound(p => p.name);
})
.Pageable()
.Sortable()
.Scrollable()
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
            //.HtmlAttributes(new { style = "height:430px;" })
.DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    //.ServerOperation(true)
    .Read(read => read.Action("GetBenches", "home"))
 )
    )
</div>

我的数据来自我 HomeController.cs

中的这个方法
    public async Task<ActionResult> GetBenches()
    {
        BenchesService bService = new BenchesService();
        List<Bench> obj = await bService.getBenches();
        Console.WriteLine("ALAL");

        var action = Json(obj.Select(s => new Bench
        {
            id = s.id,
            bookable = s.bookable,
            name = s.name,
            seatsCount = s.seatsCount,
            zone = s.zone

        }).Distinct(), JsonRequestBehavior.AllowGet);

        return action;
    }

那个叫另一个

        public async Task<List<Bench>> getBenches()
    {
        List<Bench> jsonOBJ = new List<Bench>();

        try
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = Constants.baseAddress;
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + Constants.token);
                client.DefaultRequestHeaders.Add("apiKey", Constants.apiKey);


                // New code:
                HttpResponseMessage response = await client.GetAsync("bench/list");
                if (response.IsSuccessStatusCode)
                {
                    Stream sResposta = await response.Content.ReadAsStreamAsync();
                    string res = new StreamToStringcs().ConvertStream(sResposta);

                    jsonOBJ = JsonConvert.DeserializeObject<List<Bench>>(res, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        return jsonOBJ;
    }

最后是我的 Bench class

    public class Bench
{
    public int id { get; set; }
    public string name { get; set; }
    public bool bookable { get; set; }
    public int zone { get; set; }
    public int seatsCount { get; set; }
    //public type bookedSeats {get;set;}
}

我的问题是我的网格显示任何行。它会显示一个加载栏,一段时间后它会保持空旷。 使用断点我可以看到 List obj 变量被 350 Bench 填充。

我错过了什么?

尝试将 ToDataSourceResult() 扩展添加到您的 GetBenches 结果中

public async Task<ActionResult> GetBenches([DataSourceRequest] DataSourceRequest request)
{
    BenchesService bService = new BenchesService();
    List<Bench> obj = await bService.getBenches();
    Console.WriteLine("ALAL");

    return Json(obj.Select(s => new Bench
        {
            id = s.id,
            bookable = s.bookable,
            name = s.name,
            seatsCount = s.seatsCount,
            zone = s.zone

        }).Distinct().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

这将创建一个 json 对象,其数据 属性 包含您的数据。我相信 MVC 帮助程序网格会查找此数据 属性.

如果您的控制器还没有,您可能需要添加 using Kendo.Mvc.Extensions;

顺便说一句 [DataSourceRequest] DataSourceRequest request 具有进行分页和排序所需的参数,因此如果您想使用服务器端分页和过滤,则必须将其作为参数包含在 ActionResult 中。如果您在客户端执行此操作,则不确定这是否重要