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 中。如果您在客户端执行此操作,则不确定这是否重要
在 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 中。如果您在客户端执行此操作,则不确定这是否重要