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: 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: 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: 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: 12 Jul 2024 06:38 by ADMIN
Created by: Akesh Gupta
Comments: 0
Category: UI for ASP.NET Core
Type: Feature Request
1

Currently, the ToCamelCase() method lowers only the first letter, as per the example below:

image

Is it possible to create another overload of the ToCamelCase() method that transforms the string to "randomStatusId"?

Declined
Last Updated: 13 Sep 2023 14:17 by ADMIN
Created by: Dan
Comments: 9
Category: Checkbox
Type: Feature Request
3
I need the Checkbox Component to have a readonly configuration/ API method to prevent the user from editing it but still send its value to server.
Declined
Last Updated: 02 Feb 2023 11:45 by ADMIN

Dear Telerik

The feature is related to https://www.telerik.com/account/support-center/view-ticket/1594775 this thread.

It is related to a product environment.

Scenario:

  1. Save grid options in persistent storage (i.e. DB).
  2. Grid operates successfully and return visits operate well with stored options being loaded with the grid.
  3. Then the grid column structure or some other feature is amended during a maintenance and development request - the feature setting is contained within the stored options which are loaded with the grid. The grid functions without some of the changes because the options override the changes.
  4. Behavior is unwanted so we would have to merge the new options and the old options.

Request:

Please can Telerik create functionality along the lines of:

$("#SomeGrid").data("kendoGrid").setOptions($("#SomeGrid").data("kendoGrid").mergeOptions(OptionsSaved, OptionsNew));

KR

David

Declined
Last Updated: 03 Aug 2022 05:30 by ADMIN
Dear Support,

I appreciate if there is an example on how to export the images to excel from the grid.

Note : The images display in the grid are from the Azure Cloud storage.
Declined
Last Updated: 31 May 2022 14:23 by Marianne
Created by: Marianne
Comments: 4
Category: UI for ASP.NET Core
Type: Feature Request
0

It would be useful to have a grid operator for "IN" conditions. Right now we only have 2 options for an OR without having to use a custom filtering and custom clearing functions.

We have a lot of data that needs to be filtered that is not sequential.  For example purposes:

Given that a customer has a standing purchase order for parts over time.

Given that serial numbers on said parts will not be sequential and may not be even be similar enough for wildcards (if that feature is provided.)

Given that we need to filter grid data to retrieve customer number, purchase order and a set of serial numbers, we need the equivalent of:

SELECT * FROM testdatatable WHERE customer = '#####' AND purchaseorder = '#####' AND serialnumber IN ('abciqwe', 'cid235', 'sn34087', 'hpk2679');

which would be WHERE WHERE customer = '#####' AND purchaseorder = '#####' AND (serialnumber  = 'abciqwe' OR serialnumber =  'cid235' OR serialnumber = 'sn34087' OR serialnumber 'hpk2679');

So basically I would like to have the ability to have multiple OR statements and the operand could be 'contains' or 'not contains' as that would probably work better than "equal".

Declined
Last Updated: 03 Mar 2022 09:43 by ADMIN

Our immediate need is for the MaskedTextBox.

 

And have modified my program.cs to add:

 

// Add services to the container.

builder.Services.AddControllersWithViews()

                // Maintain property names during serialization. See:

                // https://github.com/aspnet/Announcements/issues/194

                .AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver());

// Add Kendo UI services to the services container"

builder.Services.AddKendo();

 

 

I copied the code from your demo into the ASP.net 6.0 Page above.

 

I added data properties to the Index.cshtml.cs model and changed the Value property on each Kendo object to point them. That works fine

 

 

The issue is that the formatting is not applied:

 

 

Declined
Last Updated: 14 Sep 2021 07:53 by ADMIN
I don't See Telerik ASP.NET Core in My Tool Box.
Declined
Last Updated: 12 Aug 2021 07:46 by ADMIN
Created by: Carl
Comments: 3
Category: Grid
Type: Feature Request
0
An officially supported Telerik editor control for datatype XML as a grid column  ---  so that we can easily and conveniently edit XML data in a grid column
Declined
Last Updated: 15 Jul 2021 07:20 by ADMIN
Created by: Ravi
Comments: 2
Category: Grid
Type: Feature Request
1

Hi Team,

I'd like to request adding a configuration to the Kendo UI Grid or ExcelExport event which would be a setting to autofit the Excel sheet columns instead of changing the workbook.sheets.columns.autowidth. 

Thank you!

Declined
Last Updated: 15 Jul 2021 07:17 by ADMIN
Created by: Lionel Tay
Comments: 4
Category: Button
Type: Feature Request
0

Hi,

In some of the mobile interfaces, we do see a feature where users slide the submit button to trigger the form submission.

However, in the desktop interfaces, we have yet to see such a feature.

The Slide to Submit feature may help developers and users to reduce the usage of reCaptcha in some of the Form submissions.

Declined
Last Updated: 13 May 2021 08:03 by ADMIN
Created by: Imported User
Comments: 1
Category: UI for ASP.NET Core
Type: Feature Request
3
Please add an option so that is possible to set Deferred rendering default setting to either true or false globally.

Currently the default is false and can only be overwritten on a control basis and not globally.

This would benefit those customers that have decided that all/most of the controls are rendered as deferred(true). Currently they have to append the Deffered(true) to each of the helpers.
Declined
Last Updated: 01 Mar 2021 08:52 by ADMIN
I`m working development and produced I4.0 devices as well app systems since 3 years.  Are Telerick involve in this applications. 
Declined
Last Updated: 04 Feb 2021 12:05 by ADMIN

When you create a Grid using a TModel that inherits from DynamicObject, a type cast exception is thrown when setting the DataSource Model Id property.

public class Metadata : DynamicObject

{ ... }  


...
.DataSource(dataSource =>
{
    dataSource.Ajax()
      .Model(model =>
      {
          model.Id("Id");
      });
})

A type cast exception is thrown by the following line in Kendo\AspNet.Core\Kendo.Mvc\UI\DataSource\Fluent\DataSourceModelDescriptorFactoryBase.cs because ModelDynamicDataKey is not generic, so it cannot be cast to IDataKey<TModel>

dataKey = (IDataKey<TModel>)new ModelDynamicDataKey(fieldName, lambdaExpression);


The following code changes fix the issue:

DataSourceModelDescriptorFactoryBase.cs

namespace Kendo.Mvc.UI.Fluent
{
	using System.Reflection;
	using Extensions;

	/// <summary>
	/// Defines the fluent interface for configuring the <see cref="DataSource"/> Model definition.
	/// </summary>
	/// <typeparam name="TModel">Type of the model</typeparam>
	public abstract class DataSourceModelDescriptorFactoryBase<TModel> : IHideObjectMembers
        where TModel : class
    {
        protected readonly ModelDescriptor model;

        public DataSourceModelDescriptorFactoryBase(ModelDescriptor model)
        {
            this.model = model;
        }

        /// <summary>
        /// Specify the member used to identify an unique Model instance.
        /// </summary>
        /// <param name="fieldName">The member name.</param>
        protected void Id(string fieldName)
        {
            IDataKey<TModel> dataKey;
            if (typeof(TModel).IsDynamicObject())
            {
                var lambdaExpression = ExpressionBuilder.Expression<TModel, object>(fieldName);
                dataKey = new ModelDynamicDataKey<TModel>(fieldName, lambdaExpression);
            }
            else
            {
                dataKey = GetDataKeyForField(fieldName);
            }

            dataKey.RouteKey = dataKey.Name;

            model.Id = dataKey;
        }

        protected IDataKey<TModel> GetDataKeyForField(string fieldName)
        {
            var lambdaExpression = ExpressionBuilder.Lambda<TModel>(fieldName);
            var fieldType = typeof(ModelDataKey<,>).MakeGenericType(new[] { typeof(TModel), lambdaExpression.Body.Type });

            var constructor = fieldType.GetConstructor(new[] { lambdaExpression.GetType() });

            return (IDataKey<TModel>)constructor.Invoke(new object[] { lambdaExpression });
        }
    }
}

 

ModelDynamicDataKey.cs

namespace Kendo.Mvc.UI
{
    using System;
    using System.Linq.Expressions;
    using Microsoft.AspNetCore.Mvc.Rendering;

    internal class ModelDynamicDataKey<TModel> : IDataKey<TModel>
        where TModel : class
    {
        public ModelDynamicDataKey(string memberName, Expression<Func<TModel, object>> expression)
        {
            RouteKey = "id";
            Name = memberName;
            Expression = expression;
            Value = expression.Compile();
        }

        public string Name
        {
            get;
        }

        public string RouteKey
        {
            get;
            set;
        }

        public Func<TModel, object> Value
        {
            get;
        }

        public Expression<Func<TModel, object>> Expression
        {
            get;
        }

        public object GetValue(object dataItem)
        {
            try
            {
                return Value((TModel)dataItem);
            }
            catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
            {
                return null;
            }
        }

        public string HiddenFieldHtml(IHtmlHelper<TModel> htmlHelper)
        {
            return htmlHelper.Hidden(Name, null, new { id = "" }).ToString();
        }
    }
}


Declined
Last Updated: 04 Feb 2021 07:46 by ADMIN
Created by: RickC
Comments: 2
Category: PivotGrid
Type: Feature Request
1

This is actually a request for ALL PivotGrid Controls across the Telerik family. Currently only numeric values can be used in a PivotGrid. There are many instances when it can be really useful to perform Pivots on string values. Currently Telerik does not support this feature and I need to use the DevExpress PivotGrid to accomplish my use case. I would like to see Telerik adopt this same functionality.

 

 

1 2