Hello,
I have followed various examples and my very minimal knowledge of Kendo to attempt to filter a large dataset on the server side Razor Pages Page.
I have used this: https://docs.telerik.com/aspnet-core/html-helpers/editors/multiselect/binding/razor-page
However, I cannot get the filtered data to return correctly without type arguments being thrown by the method.
Things I have checked
- Pascal Case is being returned despite getting a Splice error.
- An empty array is being returned on from the server as a default
Code
1. MultiSelect Component
@model Guid @(Html.Kendo().MultiSelectFor(x => x) .DataTextField("OrderNumber") .DataValueField("Id") .Placeholder("Start typing order numbers...") .Filter(FilterType.Contains) .DataSource(dataSource => { dataSource.Ajax(); dataSource.Read(r => r.Url("/XXXX/XXXX/Index?handler=OrderMultiSelectRead") .Data("forgeryToken") .Type(HttpVerbs.Post)) .ServerFiltering(true); } ).HtmlAttributes(new {style ="width: 100%" }))
2. Server Side Code
public async Task<IActionResult> OnPostOrderMultiSelectRead([DataSourceRequest] DataSourceRequest request, string text)
{
var result = new List<Order>();
try
{
var filters = request?.Filters?.Cast<FilterDescriptor>().ToList();
var firstFilter = filters.FirstOrDefault();
if (firstFilter == null) return new JsonResult(await result.ToDataSourceResultAsync(request));
firstFilter.MemberType = typeof(int?);
var firstFilterValue = firstFilter.Value.ToString();
if (string.IsNullOrEmpty(firstFilterValue) || firstFilterValue.Length < 5)
return new JsonResult(await result.ToDataSourceResultAsync(request));
var orderNumberParsedAsInt = int.Parse(firstFilterValue);
var matchingOrders =
(await this.orderRepository.GetModelsAsync(x => x.OrderNumber == orderNumberParsedAsInt))
.OrderByDescending(x => x.OrderNumber).ToList();
return new JsonResult(await matchingOrders.ToDataSourceResultAsync(request));
}
catch(Exception exception)
{
var resultPayload = await result.ToDataSourceResultAsync(request);
resultPayload.Errors = new List<Exception> { exception };
return new JsonResult(resultPayload);
}
}