Declined
Last Updated: 25 Sep 2026 13:21 by ADMIN
Created by: Garrett
Comments: 5
Category: UI for ASP.NET Core
Type: Bug Report
1

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.

Declined
Last Updated: 25 Sep 2026 10:42 by ADMIN
Created by: Dan
Comments: 2
Category: UI for ASP.NET Core
Type: Bug Report
1

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.

Declined
Last Updated: 24 Sep 2026 14:55 by ADMIN
Created by: Alejandro
Comments: 2
Category: Grid
Type: Bug Report
0

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

                                      
Declined
Last Updated: 24 Sep 2026 12:55 by ADMIN
Created by: Hubert Frick
Comments: 1
Category: UI for ASP.NET Core
Type: Bug Report
1

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 + "]");
With that or a similar solution , my custom Timeline View can be selected as before.
Declined
Last Updated: 24 Sep 2026 12:09 by ADMIN

When it is not scrollable it will look like this and not correct aligned. 

When I have enough items it i will look good but since my database is dynamic I cannot wait till it is full. 


What should I do?

.Scrollable() --> this it the option which I use.
Declined
Last Updated: 03 Sep 2026 08:19 by ADMIN
Built-in Grid UI for state persistence with multi-layout management

Add first-class Save/Load layout tools to the Grid toolbar that persist and restore Grid state without custom wiring. The default provider should use localStorage, with an extensibility point to plug in server storage. Users should be able to:
- Save multiple named layouts (columns/order/visibility, sorting, filtering, grouping, paging, search panel state).
- Open a built-in popup to manage layouts (save as, rename, delete, set default) and load a selected layout.
- Choose storage scope per layout (local vs. server) with a simple toggle; the server provider API can be implemented by the app.

Behavior and scope
- Persist and restore via an internal provider abstraction; ship a default localStorage provider and document a server provider interface.
- Support full or partial restores; allow picking which parts to include (for example, only columns/layout vs. full DataSource state) to align with existing guidance on selectively applying options through `setOptions({ ... })` and DataSource APIs like `dataSource.filter(...)` [1] [2] [3] [4].
- Avoid double reads and support automatic persistence flows similar to the documented beforeunload/ready pattern; native implementation should mirror the current best-practice approach that saves on leave and restores on load, with an option to disable automatic behavior when using explicit Save/Load actions [2] [5].
- Respect known constraints for SignalR binding by restoring layout via `setOptions({ columns, ... })` and reapplying data state via DataSource methods to keep the hub connection intact; provide an out-of-the-box “SignalR-safe” mode that applies filters/sort/page through DataSource APIs [1] [3] [4].
- Include search box value persistence and ensure multi-check filter lists load their full option sets when state is restored, consistent with existing recommendations to persist search input and configure filter DataSources [6].

Developer experience
- New built-in toolbar tools: “Save Layout,” “Load Layout,” and “Manage Layouts…”, plus a public API to trigger the same actions programmatically [7] [8].
- Config options to:
  - Enable the feature and set a default storage provider (local or custom).
  - Define which state segments to include (columns, sorting, filtering, grouping, paging, search).
  - Provide hooks/events for pre-save, post-save, pre-load, post-load to modify payloads or enforce policies.
- A documented provider interface for custom storage so apps can store/retrieve named layouts from a server.

Rationale
- State persistence is officially supported via `getOptions()`/`setOptions()` and is commonly implemented with localStorage and beforeunload/ready flows, but requires custom buttons and wiring today [2] [5].
- Partial restore and DataSource API reapplication are established practices to handle limitations such as SignalR-bound grids where full `setOptions()` is not viable; the feature should codify these patterns into a turnkey, user-facing experience [1] [3] [4].
- Developers frequently need to persist search input and ensure multi-check filter option lists are correct after restore; including these in first-party behavior reduces extra glue code [6].

Requested deliverables
- Built-in toolbar Save/Load/Manage UI with a popup for multiple named layouts and defaults.
- Default localStorage provider; extensible provider model for server storage.
- Options to scope which state is saved/restored and a SignalR-safe mode.
- Public API and events for integration and policy control.
- Docs and demos covering automatic and manual flows, local vs. server storage, and SignalR scenarios.

[1] [3] [4] [2] [5] [6] [7] [8]

[1]: https://www.telerik.com/forums/localstorage-persistence-not-working-with-kendo-grid
[2]: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/grid-automatically-persist-state
[3]: https://www.telerik.com/forums/localstorage-persistence-not-working-with-kendo-grid
[4]: https://www.telerik.com/forums/localstorage-persistence-not-working-with-kendo-grid
[5]: https://www.telerik.com/aspnet-core-ui/documentation/knowledge-base/grid-automatically-persist-state
[6]: https://www.telerik.com/forums/grid-state-persistance-with-column-filters-or-search-bar
[7]: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/data-management/grid/overview
[8]: https://www.telerik.com/aspnet-core-ui/documentation/html-helpers/data-management/grid/toolbar
Declined
Last Updated: 09 Jan 2026 11:18 by ADMIN

Bug report

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.

Reproduction of the problem

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));
        }

Expected/desired behavior

Instead of 1 record it returns 2 same items.

Filtering of the TreeList should be as fast as sorting.

Environment

  • Kendo UI version: 2023.1.117
Declined
Last Updated: 02 Jan 2026 11:07 by ADMIN

Bug report

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.

Reproduction of the problem

  1. Open this Dojo
  2. Click the Without resize button
  3. Navigate the Slider with the mouse

Note that even if the With resize button is subsequently clicked the behavior persists

Current behavior

Slider.setOptions() breaks mouse navigation of the Widget

Expected/desired behavior

Slider.setOptions() should call the resize method internally to prevent the issue

Environment

  • Kendo UI version: 2021.2.616
  • Browser: [all ]
Declined
Last Updated: 26 Dec 2025 22:30 by ADMIN

Bug report

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.

Reproduction of the problem

  1. Open this project(PDFViewerDPL.zip) and run it

Current behavior

An empty file loads in the PDFViewer while the loaded PDF file contains the logo of the Firefox browser.

Expected/desired behavior

The PDFViewer should display the Firefox logo loaded in the PDF file.

Environment

  • Kendo UI version: 2020.3.1021
  • jQuery version: x.y
  • Browser: [all]
Declined
Last Updated: 01 Sep 2025 10:23 by ADMIN

Bug report

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.

Reproduction of the problem

  1. Add a DateOnly? field to the model:

public DateOnly? OrderDate { get; set; }

  1. Bind a Grid column to the field.
  2. Set the default value in the DataSource:
.Model(model =>
{
    model.Id(p => p.OrderID);
    model.Field(p => p.OrderDate).DefaultValue(new DateOnly());
})
  1. Configure Popup editing in the Grid.
  2. Add a DateOnly.cshtml editor in EditorTemplates:
@model DateOnly?

@(Html.Kendo().DatePickerFor(m => m).ParseFormats(new string[] { "MM/dd/yyyy" }).HtmlAttributes(new { title = Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("") }))

Current behavior

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.

Expected/desired behavior

The field value should be displayed in the picker, even when ParseFormats is set.

Environment

  • Kendo UI version: 2024.4.1112
  • Browser: All
Declined
Last Updated: 11 Aug 2025 13:12 by ADMIN

### 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]

Declined
Last Updated: 25 Jul 2025 05:07 by ADMIN
Scheduled for 2024 Q3 (Aug)
Created by: Chongsiong
Comments: 1
Category: FileManager
Type: Feature Request
2

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()))
     ...
)

Declined
Last Updated: 25 Jul 2025 05:03 by ADMIN
Scheduled for 2025 Q2 (May)

### 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]

Declined
Last Updated: 19 Jun 2025 20:56 by ADMIN
Created by: JG
Comments: 1
Category: UI for ASP.NET Core
Type: Feature Request
2

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:

  • Improve API consistency across Kendo components.
  • Simplify code for dynamic menu updates.
  • Eliminate reliance on raw HTML and manual encoding flags.
Declined
Last Updated: 04 Feb 2025 08:01 by ADMIN

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.

Declined
Last Updated: 27 Jan 2025 17:54 by ADMIN
I am using the Kendo UI Upload Control and wanted to allow for multiple files in synchronous mode, but when adding multiple files at the same time, they are grouped together in the same line item. Is there a way to have each separate file as its own line item and remove item individually if we upload multiple files together? Currently while uploading multiple files and removing a single one is not supporting in synchronous mode.
Declined
Last Updated: 07 Jan 2025 11:59 by Ivaylo
Scheduled for 2025 Q1 (Feb)
Created by: Kaya
Comments: 1
Category: DatePicker
Type: Feature Request
1

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>

Declined
Last Updated: 21 Oct 2024 15:10 by Pedro
Created by: Pedro
Comments: 2
Category: TextBox
Type: Feature Request
1
I would like you to implement the asp-for attribute functionality in the TextBox element used with TagHelpers, i.e. <kendo-textbox asp-for="FieldOfModel" />. Currently it works using HtmlHelpers, with @(Html.Kendo().TextBoxFor(m => m.Email)) but if you use asp-for in a <kendo-textbox> it gives an error.
Declined
Last Updated: 26 Sep 2024 15:46 by ADMIN

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]).

Declined
Last Updated: 04 Sep 2024 10:31 by ADMIN

### 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]

1 2 3