I am seeing that once a grid checkboxlist column filter exceeds about 1000 items the wait time appears to increase non-linearly (performance is worse than linear.) For example, with 3,000 items the page freezes for about 30 seconds. The data is fetched in under 50 milliseconds, so the vast majority of this time appears to be processing by Kendo.
Please see the attached for my configuration.
In the ThemeBuilder the controls do not use the latest version.
For instance while playing around with the ThemeBuilder I noticed that the primary button does not look primary like on the demos page.
Also it would be helpful to provide a page where you explain where every color is used.
Using Telerik.Ui.for.aspnetcore version 2025.4.1111, when i create a grid
@(
Html.Kendo().Grid<Land_Management_System.LASIViewModels.LASIMainRecordViewModel>()
.Name("LASIGrid")
.Height("auto")
.Editable(x => x.Enabled(true)
.Mode(GridEditMode.PopUp)
.TemplateName("_LASITabStrip")
.Window(x =>
{
x.Width("90vw").Height("90vh");
x.Resizable().Scrollable(true);
x.Actions(x => x.Minimize().Maximize().Close());
})).Events(x => x.Save("onGridSave").Edit("onGridEdit"))
.Columns(columns =>
{
columns.Bound(p => p.Id).Filterable(true).Visible(false);
columns.Bound(p => p.LASIGuid).Title("LASI Ref No").Filterable(true);
columns.Bound(p => p.UPRN).Title("UPRN").Filterable(true).Visible(false);
columns.Bound(p => p.SiteLocation).Title("Site Location").Filterable(true);
columns.Bound(p => p.Region).Title("Region").Filterable(true).Visible(false);
columns.Bound(p => p.Pre2015Council).Title("Former NIHE District").Filterable(true).Visible(false);
columns.Bound(p => p.SuperCouncil).Title("Super Council").Filterable(true);
columns.Bound(p => p.AreaOffice).Title("Area Office").Filterable(true);
columns.Bound(p => p.ParliamentaryConstituency).Title("Parliamentary Constituency").Filterable(true).Visible(false);
columns.Bound(p => p.DevelopmentLimit).Title("Development Limit").ClientTemplate("#= DevelopmentLimit ? DevelopmentLimit.Name : '' #").Filterable(true);
columns.Bound(p => p.Area).Title("Area").Filterable(true);
columns.Bound(p => p.ReferenceType).Title("Reference Type").ClientTemplate("#=ReferenceType ? ReferenceType.Name : ''#").Filterable(true);
columns.Bound(p => p.PlannerText).Title("Planner").Filterable(true);
columns.Command(command =>
{
command.Custom("Edit").Click("showEdit");
command.Custom("Details").Click("showDetails");
});
})
.Filterable(filterable => filterable
.Mode(GridFilterMode.Menu) // Enables per-column filtering
)
.Width("auto")
.Pageable()
.Groupable()
.ToolBar(t =>
{
t.Create();
})
.Sortable()
.Scrollable()
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("grid_error_handler").RequestEnd("on_board_grid_request_end"))
.PageSize(10)
.ServerOperation(true)
.Model(model =>
{
model.Id(p => p.Id);
model.Field(prop => prop.Id).DefaultValue(0);
model.Field(prop => prop.DevelopmentLimit).DefaultValue(new DevelopmentLimitViewModel());
model.Field(prop => prop.ReferenceType).DefaultValue(new ReferenceTypeViewModel());
model.Field(prop => prop.Planner).DefaultValue(new UsersViewModel());
model.Field(prop => prop.Category).DefaultValue(new CategoryViewModel());
model.Field(prop => prop.TempUploadKey);
})
.Read(read => read.Action("LASIRead", "LASI"))
.Create(create => create.Action("LASICreate", "LASI"))
.Update(update => update.Action("LASIUpdate", "LASI"))
)
.NoRecords(true)
)
when i try and create a new record the save button is disabled when it fails validation, when i complete the failed validation fields the button is not re-enabling
Bug report
For the Telerik Scheduler Timeline View, since the update from somewhere in between version 2022.3.1109 to 2024.2.154, a custom timeline view cannot be selected if the view name has dot(s) in its name (e.g. "kendo.ui.customTimelineView").
Reproduction of the problem
Add a custom Timeline View by extending the kendo.ui.TimelineView
Current behavior
Unlike older versions (I know that it worked with version <= 2022.3.1109, but don't know when exactly it was introduced) now the ui blocks, when the custom select view button is clicked. Specifically, the problem is in kendo.scheduler.js at line 4554:
var viewElementToSelect = that.toolbar.find("[" + kendo.attr("name") + "=" + name + "]");Expected behavior
In this code line, the find method does not work when the variable "name" contains something like "kendo.ui.CustomTimelineView". As a solution, I suggest escaping the name beforehand:
var nameEscaped = $.escapeSelector(name);
var viewElementToSelect = that.toolbar.find("[" + kendo.attr("name") + "=" + nameEscaped + "]");Problem with ToTreeDataSourceResult method when filtering on root and child level.
Also applying filtering causes a significant slowdown in the query created by the ToTreeDataSourceResult method even when applied to small datasets.
Please refer to the code below and simply filter the first column with the value of 5.
//View
@(Html.Kendo().TreeList<WebApplication1.Models.SerialModel>()
.Name("treelist")
.Toolbar(toolbar => toolbar.Create().Text("New Level"))
.Columns(columns =>
{
columns.Add().Field(e => e.RecordID).Width(280);
columns.Add().Field(e => e.SerialNumber).Width(160);
columns.Add().Field(e => e.Name);
columns.Add().Field(e => e.Location).Width(200);
columns.Add().Field(e => e.ParentID).Width(140);
columns.Add().Command(c =>
{
c.CreateChild().Text("New Child");
c.Edit();
c.Destroy();
}).Width(250);
})
.Editable(editable => editable.Mode("inline")).Filterable(true).Filterable(f => f.Extra(false))
.DataSource(dataSource => dataSource
.Read(read => read.Action("TreeListData", "Home"))
//.ServerOperation(false)
.Model(m =>
{
m.Id(f => f.RecordID);
m.ParentId(f => f.ParentID).DefaultValue("0");
})
)
.Height(540)
)
//Controller code:
public ActionResult TreeListData([DataSourceRequest]DataSourceRequest request, int? id)
{
var source = Enumerable.Range(1, 5).Select(x => new SerialModel()
{
RecordID = x,
SerialNumber = x,
Name = "Name " + x,
Location = "Location " + x,
hasChildren = true,
ParentID = x < 5 ? 0 : (x / 5)
});
return Json(source.ToTreeDataSourceResult(request, e => e.RecordID,
e => e.ParentID, e => id.HasValue ? e.ParentID == id : e.ParentID == 0, m => m));
}
Instead of 1 record it returns 2 same items.
Filtering of the TreeList should be as fast as sorting.
When the setOptions of the Slider is applied with or without parameters the navigation of the Slider with the mouse breaks unless the resize() method is called immediately after.
Note that even if the With resize button is subsequently clicked the behavior persists
Slider.setOptions() breaks mouse navigation of the Widget
Slider.setOptions() should call the resize method internally to prevent the issue
When a PDF file that contains PNG images is loaded in the PDFViewer that uses DPL, the PNG files are not displayed in the viewer.
An empty file loads in the PDFViewer while the loaded PDF file contains the logo of the Firefox browser.
The PDFViewer should display the Firefox logo loaded in the PDF file.
When ParseFormats is set in the DatePicker editor used in the Grid popup, the picker does not show the field value to which it is bound.
public DateOnly? OrderDate { get; set; }
.Model(model =>
{
model.Id(p => p.OrderID);
model.Field(p => p.OrderDate).DefaultValue(new DateOnly());
})
@model DateOnly?
@(Html.Kendo().DatePickerFor(m => m).ParseFormats(new string[] { "MM/dd/yyyy" }).HtmlAttributes(new { title = Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("") }))
When editing a record. The value of the OrderDate field is not displayed in the DatePicker.
If you remove the ParseFormats option from the DatePicker, it shows the value as expected.
The field value should be displayed in the picker, even when ParseFormats is set.
### Bug report
When the Grid is set up for OData-v4 binding, the columns that bind to DateOnly fields fail to filter. The date value in the filter expression contains the time portion and the following error is thrown:
"The binary operator GreaterThan is not defined for the types 'System.Nullable`1[System.DateOnly]' and 'System.Nullable`1[System.DateTimeOffset]'."
### Reproduction of the problem
1) Create a Grid that uses OData-v4 binding.
2) Bind a specified column to a DateOnly field.
3) Filter the column through the default column filter menu and open the browser DevTools to review the response of the request.
//Model
public DateOnly LastProdUpdate { get; set; }
//View
@(Html.Kendo().Grid<ProductViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.LastProdUpdate).Format("{0:dd/MM/yyyy}");
})
...
.Filterable()
.DataSource(dataSource => dataSource
.Custom()
.Type("odata-v4")
.Transport(t =>
{
t.Read(read => read.Url("/odata/Products").Data("function() {return {'$expand': 'Employee'} }"));
})
.PageSize(10)
.ServerPaging(true)
.ServerFiltering(true)
.ServerSorting(true)
)
)### Expected/desired behavior
The DateOnly fields must be filtered successfully as the DateTime fields.
### Environment
* **Kendo UI version: 2024.4.1112
* **Browser: [all]
Is it possible to implement an option that enables the paging of the Grid View?
For example:
@(Html.Kendo().FileManager()
.Name("filemanager")
.Views(gridView => gridView.Grid(grid => grid.Pageable()))
...
)
### Bug report
When loading an editor through a partial View using EditorTemplateView(await Html.PartialAsync("PartialViewName")), the following error occurs:
The 'await' operator can only be used within an async lambda expression. Consider marking this lambda expression with the 'async' modifier.
### Reproduction of the problem
@(Html.Kendo().Form<UserViewModel>()
.Name("myForm")
.Items(items =>
{
items.Add().Field(f => f.Username).EditorTemplateView(await Html.PartialAsync("PartialViewName"));
})
)### Expected/desired behavior
The EditorTemplateView() must accept Html.PartialAsync("PartialViewName").
### Environment
* **Telerik UI for ASP.NET Core version: 2024.4.1112
* **Browser: [all]
Currently, when dynamically appending menu items using the append() method, there is no built-in support to specify an icon via an icon, iconClass, or similar property — unlike other Kendo UI components such as kendo.ui.Button, which allow this directly.
To include an icon today, we must use inline HTML within the text property and set encoded: false, like so:
menu.append({
text: '<span class="k-icon k-i-plus"></span> Add Item',
encoded: false
});While this workaround functions, it's not as clean or consistent as using a dedicated iconClass or icon option.
Please consider adding official support for an iconClass, icon, or similar property when using append() with kendo.ui.Menu, aligning it with how other Kendo components handle icons.
This would:
In this screenshot, End Date and Subm Is Open are "nested" properties, and Prod Date and Is LatestVersion are *not* nested. The row filter functionality is not displaying the correct row filter widget.
Here's a data sample:
{
"SubmissionVersionId": 1020,
"ReleaseId": 2008,
"SubmissionVersionNumber": 6,
"IsLatestVersion": true,
"SetId": "E2410-1f",
"EioSubmissionId": null,
"SubmissionName": null,
"RequestDate": null,
"SubmissionDate": null,
"WitsDate": null,
"ProdDate": null,
"OnHoldReason": null,
"IsSubmitted": true,
"Created": "2024-12-20T14:39:51-08:00",
"RowVersion": "AAAAAAAAn28=",
"Release": {
"ReleaseId": 2008,
"UnversionedSetId": "E2410-1",
"StatusId": 1,
"ReleaseTypeId": 1,
"ReleasePriorityId": 3,
"EncDate": "2025-01-08",
"KphcSuite": null,
"SnowReq": null,
"SnowRitm": null,
"Created": "2024-12-17T11:20:02-08:00",
"ReleasePriority": {
"ReleasePriorityId": 3,
"ReleasePriorityName": "Routine",
"ReleasePriorityAbbreviation": "ROU"
},
"ReleaseType": {
"ReleaseTypeId": 1,
"ReleaseTypeName": "New"
},
"Status": {
"ReleaseStatusId": 1,
"ReleaseStatusName": "In Progress",
"IsOpen": true
}
}
}
Here is the schema definition.
.Schema(s => {
s.Model(model =>
{
model.Id(p => p.SubmissionVersionId);
model.Field(p => p.SubmissionVersionId).Editable(false);
model.Field(p => p.ReleaseId).Editable(false);
model.Field(p => p.SubmissionVersionNumber).Editable(false);
model.Field(p => p.IsLatestVersion).Editable(false);
model.Field(p => p.EioSubmissionId).Editable(false);
model.Field(p => p.SubmissionName);
model.Field(nameof(SubmissionVersion.RequestDate), typeof(DateOnly)).DefaultValue(null);
model.Field(nameof(SubmissionVersion.SubmissionDate), typeof(DateOnly)).DefaultValue(null);
model.Field(nameof(SubmissionVersion.WitsDate), typeof(DateOnly)).DefaultValue(null);
model.Field(nameof(SubmissionVersion.ProdDate), typeof(DateOnly)).DefaultValue(null);
model.Field(nameof(SubmissionVersion.IsSubmitted), typeof(bool)).DefaultValue(false);
// Release fields
model.Field(nameof(Release.UnversionedSetId), typeof(string)).Editable(false);
model.Field(nameof(Release.EncDate), typeof(DateOnly));
model.Field(nameof(Release.SnowReq), typeof(string));
model.Field(nameof(Release.KphcSuite), typeof(string));
model.Field(nameof(Release.SnowRitm), typeof(string));
// ReleaseStatus fields
model.Field(nameof(ReleaseStatus.IsOpen), typeof(bool)).Editable(false);
});
})
I've attached the full cshtml file.
This just seems like a minor oversight since the Enable(bool) method exists on the DatePicker html helper and other Kendo taghelpers support the enable or enabled attribute, but there doesn't seem to be an enable-like attribute for the kendo-datepicker. Thanks!
<kendo-datepicker for="ReadOnlyDate" enable="false"></kendo-datepicker>
REPL to reproduce the problem following the steps below: https://netcorerepl.telerik.com/wSYNlmbA55iBcMhu20
Steps to reproduce
Type "wil" to get suggestions:
Hit tab to accept the first suggestion.
Click the arrow to display the list of options:
Observe the list of unrelated options, and the textbox now containing the value of the first option listed:
Additional information
The "normal" read request sends what is ultimately handled as a DataSourceRequest object in the controller that includes (among other things) information on how the data should be sorted. The "value mapper" request, on the other hand, sends only the raw values that need to be mapped (without any information on how they are being sorted by the DataSource). As a result, the positional index returned to the value mapper is incorrect if/when the data is sorted differently.
For example, the "normal" read request calls the controller action, it retrieves data [A, C, D, B], and the DataSourceRequest is applied to sort it as [A, B, C, D] and this is how it's displayed in the dropdown list. If the value "B" needs to be mapped, the "value mapper" request calls a similar (but different) controller action, it retrieves the same set of data [A, C, D, B] but does not make any attempt to sort it, finds "B" in the list (#4), and this is returned to the component (which then sets the dropdown's selectedIndex = 4, but in the dropdown's sorted list of data, this corresponds with the value "D", not "B" [which would be 2]).
### Bug report
When the Grid is grouped by a specified column, and this column has a "groupFooterTemplate" that contains aggregates from other fields, it cannot be exported to Excel. It throws a JavaScript exception.
### Reproduction of the problem
1) Group the Grid by the column "ProductName".
2) Export it to Excel through the built-in command "Export to Excel".
3) JS exception is thrown.
A Dojo sample for reproduction: https://dojo.telerik.com/UyUruyOZ
### Expected/desired behavior
The Excel export should work as expected when the Grid is grouped.
### Environment
* **Kendo UI version: 2022.2.802
* **jQuery version: 1.12.4
* **Browser: [all]