Under Review
Last Updated: 20 Jun 2022 18:52 by ADMIN

This is a strange bug I came across when making a simple grid for a small personal project. I created a class called Book, which looks like this:

[Table("Books")]
    public class Book
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Title { get; set; } = null!;

        public Checkout? Checkout { get; set; }

        [NotMapped]
        public bool CheckedOut => Checkout != null;
    }

I then created a simple Razor view on which to show the books on a grid. Here is what the code for the page looks like:

@{
    ViewData["Title"] = "All Books";
}

@(
    Html.Kendo().Grid<LibraryMvc.Core.Entities.Book>()
        .Name("bookGrid")
        .Pageable(p => {
            p.PageSizes(new[] {20, 50, 100 });
            p.Numeric(true);
            p.Input(true);
        })
        .Editable(e => e.Mode(GridEditMode.InLine))
        .Filterable()
        .Sortable()
        .Scrollable()
        .ToolBar(t => t.Create())
        .Columns(col => {
            col.Bound(c => c.Id).Title("ID");
            col.Bound(c => c.Title).Title("Title");
            col.Bound(c => c.CheckedOut).Title("Checked Out");
            col.Command(com => {
                com.Edit();
                com.Destroy();
            }).Title("Manage");
        })
        .DataSource(ds => 
            ds.Ajax()
            .PageSize(20)
            .Model(md => {
                md.Id(f => f.Id);
                md.Field(f => f.Id).Editable(false);
                md.Field(f => f.CheckedOut).Editable(false);
            })
            .Read(r => r.Action("Book_Read", "Book"))
            .Create(c => c.Action("Book_Create", "Book"))
            .Update(c => c.Action("Book_Update", "Book"))
            .Destroy(c => c.Action("Book_Destroy", "Book"))
        )
)

When running my app with this code, I noticed that client-side validation would not work on the grid. Nothing would stop me from adding multiple Book rows with empty Titles, despite Title being a [Required] property based on my Book class's Data Annotations:

I assumed I did something wrong, so I scoured the internet and Telerik's support items in hopes of finding something, but then I came across this when inspecting the page's elements in Chrome's dev tools:

Look at the script tag. For whatever reason, the kendoTextBox ended up using the Razor view's ViewData["Title"] property. Oops!

To work around this, I ended up changing my Book class's Title field to BookTitle, as shown below:

[Table("Books")]
    public class Book
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [Column("Title")]
        public string BookTitle { get; set; } = null!;

        public Checkout? Checkout { get; set; }

        [NotMapped]
        public bool CheckedOut => Checkout != null;
    }

With this property name changed, I was able to get client-side validation to work as needed:

A second workaround involved getting rid of the ViewData["Title"] definition on my Razor view:

Given all this, it looks like something that's generating the client-side validation on the page is getting tripped up over the word "Title" being used by multiple items on the page.

Unplanned
Last Updated: 17 Jun 2022 09:46 by Sachin
Created by: Sachin
Comments: 0
Category: UI for ASP.NET Core
Type: Feature Request
1
I'd like to utilize the SpellCheck functionality that is already available for Telerik UI for AJAX in the Core suites as well.
Unplanned
Last Updated: 07 Jun 2022 07:38 by ADMIN
Created by: Christopher
Comments: 1
Category: UI for ASP.NET Core
Type: Feature Request
0
I would like the CascadeFrom value to be conditional based on a value obtained through JavaScript/JQuery.  This way it allows for web pages to be more dynamic.
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".

Completed
Last Updated: 26 May 2022 08:54 by ADMIN
Release 2022.R2.SP.next

### Bug report

When Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet package is installed in Telerik UI for ASP.NET Core application, it throws an exception:

FileNotFoundException: Could not load file or assembly 'Microsoft.DotNet.InternalAbstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.

### Reproduction of the problem

1. Create Telerik UI for ASP.NET Core MVC application (.NET Core version 6.0).

2. Install Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet package (version 6.0.5).

3. Turn on the Razor Runtime Compilation:

//Program.cs file

// Add services to the container.
builder.Services.AddControllersWithViews()
                .AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver())
                .AddRazorRuntimeCompilation();

4. Run the application and review the exception.

Attached is a runnable sample for reproduction.

### Workaround

Install Microsoft.DotNet.InternalAbstractions NuGet package (version: 1.0.0)

### Environment

* **Kendo UI version: 2022.2.510
* **jQuery version: 1.12.4
* **Browser: [all]

Completed
Last Updated: 25 May 2022 07:13 by ADMIN
Created by: Arvind
Comments: 1
Category: UI for ASP.NET Core
Type: Bug Report
1

Bug report

The DatePicker's popup has a CSS min-height property set that causes it to sometimes have an empty blank space at the bottom.

Reproduction of the problem

  1. Open the DatePicker Demo
  2. Expand the monthpicker

Review another occurence.

Expected/desired behavior

There should be a blank space in the DatePicker's popup.

Environment

  • Kendo UI version: 2021.3.914
  • Browser: [all]
Completed
Last Updated: 20 May 2022 14:16 by ADMIN
Release 2022.R2.SP.next

kendo.aspnetmvc.js does not account for server aggregates serialized with came case property names like it does for Groups.

Can the following code (minus the comments) be included in a future release to resolve this?

function translateAggregateResults(aggregate) {
            var obj = {};
            // LSS: support for camel case serialization
            obj[(aggregate.AggregateMethodName || aggregate.aggregateMethodName).toLowerCase()] = (aggregate.Value || aggregate.value);
            return obj;
        }
        function translateAggregate(aggregates) {
            var functionResult = {}, key, functionName, aggregate;
            for (key in aggregates) {
                functionResult = {};
                aggregate = aggregates[key];
                for (functionName in aggregate) {
                    functionResult[functionName.toLowerCase()] = aggregate[functionName];
                }
                aggregates[key] = functionResult;
            }
            return aggregates;
        }
        function convertAggregates(aggregates) {
            var idx, length, aggregate;
            var result = {};
            for (idx = 0, length = aggregates.length; idx < length; idx++) {
                aggregate = aggregates[idx];
                // LSS: support for camel case serialization
                result[(aggregate.Member || aggregate.member)] = extend(true, result[(aggregate.Member || aggregate.member)], translateAggregateResults(aggregate));
            }
            return result;
        }
        extend(true, kendo.data, {
            schemas: {
                'aspnetmvc-ajax': {
                    groups: function (data) {
                        return $.map(this._dataAccessFunction(data), translateGroup);
                    },
                    aggregates: function (data) {
                        data = data.d || data;
                        // LSS: support for camel case serialization
                        var aggregates = data.AggregateResults || data.aggregateResults || [];
                        if (!$.isArray(aggregates)) {
                            for (var key in aggregates) {
                                aggregates[key] = convertAggregates(aggregates[key]);
                            }
                            return aggregates;
                        }
                        return convertAggregates(aggregates);
                    }
                }
            }
        });

Completed
Last Updated: 12 May 2022 12:38 by ADMIN
Release 2022.R2
Created by: Rathish
Comments: 1
Category: UI for ASP.NET Core
Type: Feature Request
1

Hi,

We have  a requirement for circled progress bar. Need to know whether you have specifications regarding the requirement or any optimization need to be done within the given framework to get the desired result. Please find the attached file for reference.

 

Thanks,

Rathish S

Completed
Last Updated: 12 May 2022 11:54 by ADMIN
Release 2022.R2
Created by: Ehsan
Comments: 3
Category: UI for ASP.NET Core
Type: Feature Request
11
Due to changes in the ASP.NET Core framework and how the Authentication is implemented the MVC5 implementation of the SecurityTrimming option became obsolete. 
Unplanned
Last Updated: 21 Apr 2022 13:28 by Daniel
Created by: Daniel
Comments: 0
Category: UI for ASP.NET Core
Type: Feature Request
1
Looking to change the width of a scrollable Menu when the browser's window is resized. 
Completed
Last Updated: 12 Apr 2022 08:23 by ADMIN
Release 2022.R1.SP.next

Bug report

When using th-TH culture and setting a valid name for a component an exception InvalidOperationException: Name cannot contain spaces. is thrown.

Reproduction of the problem

Sample Application

  1. Run the attached application
  2. Select th-TH from the DropDownList, to change the culture

Current behavior

An InvalidOperationException: Name cannot contain spaces. is thrown.

Expected/desired behavior

Exception should not be thrown and components should be rendered as expected.

Environment

  • Kendo UI version: 2022.1.119
  • Browser: [all]
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:

 

 

Unplanned
Last Updated: 01 Mar 2022 16:28 by ADMIN
Created by: Chris
Comments: 0
Category: UI for ASP.NET Core
Type: Feature Request
0

I know you can query the client side JavaScript version using 

kendo.version

It would be handy if you could query the dll assembly version or cdn url so the URLs can automatically match the dll used in the solution especially when nuget is used to update it currently I work around this using:

    @{  var version = typeof(Kendo.Mvc.KendoServices).Assembly.GetName().Version;
        string kendoCDN = $"//kendo.cdn.telerik.com/{version.Major}.{version.Minor}.{version.Build}";}
    <link href="@Url.Content(kendoCDN + "/styles/kendo.bootstrap-v4.min.css")" rel="stylesheet" type="text/css" />
Just an idea...
Unplanned
Last Updated: 18 Feb 2022 09:01 by ADMIN
Created by: Zen
Comments: 1
Category: UI for ASP.NET Core
Type: Feature Request
0
I am loading a few task boards with up to 2000 items. It would useful to have a batch or paged scrolling option like on the grid. I asked a question on the forums and Aleksandar from the Telerik team asked me to open a feature request.
Unplanned
Last Updated: 16 Feb 2022 08:09 by ADMIN
Created by: FIMS Computing Services FIMS - UWO
Comments: 1
Category: UI for ASP.NET Core
Type: Feature Request
0

Hi,

Will the TagCloud control from the ASP.NET AJAX package ever be ported to the ASP.NET Core package?

I use this on faculty profiles and it is a required component if I ever want to move them to Core.

Thanks,

Charlotte McClellan

Unplanned
Last Updated: 03 Feb 2022 06:37 by ADMIN
Created by: Stephane
Comments: 0
Category: UI for ASP.NET Core
Type: Feature Request
1

There is a new CheckBoxTagHelper to support the new rendering, but the public ModelExpression For { get; set; } property is missing.

Declined
Last Updated: 01 Feb 2022 14:47 by ADMIN
Created by: A
Comments: 2
Category: UI for ASP.NET Core
Type: Bug Report
0

Kendo dialog structure doesn’t use Aria landmarks properly for buttons  - this leads to a validation error

The pager control's select box renders role="listitem" but the parent is missing role="list"  - this leads to a validation error

Listviews will render role="list" even when empty - this leads to a validation error

Kendo grids use 2 tables (one for header and one for the data) which means that there are no role="cell" assigned to any of the headers  - this leads to a validation error

Scrollable grids are missing a tabindex="0" to allow for keyboard navigation - this leads to a validation error

 

this form doesn't have Core 2, 2.1, 3.0, 3.1 or 5 in the .Net Framework drop down. Just gonna pick 4.8 even though it doesn't apply. I am using core 5.

Declined
Last Updated: 01 Feb 2022 14:45 by ADMIN
  • ArgumentOutOfRangeException: Index and length must refer to a location within the string. (Parameter 'length')

    • string.Substring(int startIndex, int length)

    • Kendo.Mvc.Rendering.KendoHtmlGenerator.SanitizeId(string id)

    • Kendo.Mvc.UI.WidgetBase.get_Id()

    • Kendo.Mvc.UI.WidgetBase.RenderTrialMessage(TextWriter writer)

    • Kendo.Mvc.UI.WidgetBase.RenderHtml(TextWriter writer)

    • Kendo.Mvc.UI.WidgetBase.ToHtmlString()

    • Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>.ToHtmlString()

    • Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder>.WriteTo(TextWriter writer, HtmlEncoder encoder)

    • Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBuffer.WriteToAsync(TextWriter writer, HtmlEncoder encoder)

    • Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderLayoutAsync(ViewContext context, ViewBufferTextWriter bodyWriter)

    • Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderLayoutAsync(ViewContext context, ViewBufferTextWriter bodyWriter)

    • Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)

    • Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)

    • Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)

    • Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, string contentType, Nullable<int> statusCode)

    • Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)

    • Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultAsync>g__Logged|22_0(ResourceInvoker invoker, IActionResult result)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|30_0<TFilter, TFilterAsync>(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext<TFilter, TFilterAsync>(ref State next, ref Scope scope, ref object state, ref bool isCompleted)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultFilters>g__Awaited|28_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)

    • Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)

    • Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)

    • Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)

    • Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Declined
Last Updated: 01 Feb 2022 12:38 by Cypher

Steps to reproduce

  1. Execute the code below
  2. Enter some values in the Html and Kendo inputs
  3. Hit the browser's back button
  4. Hit the browser's forward button to redisplay the page

Current Behavior

The value in the Html Input is restored but not the value of the Kendo Input. The same behavior applies for Kendo NumericTextBox, etc.

 

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.bootstrap-v4.min.css" />
    <script src="https://kendo.cdn.telerik.com/2021.3.1207/js/jquery.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2021.3.1207/js/kendo.all.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2021.3.1207/js/kendo.aspnetmvc.min.js"></script>
  </head>
  <body>
    <form>
 
      <div>
        <label for="HtmlInput">Html Input</label>
        <input type="text" id="HtmlInput" name="HtmlInput">
      </div>
 
      <div>
        <label for="KendoInput">Kendo Input</label>
        @(Html.Kendo().TextBox ().Name ("KendoInput"))
      </div>
 
    </form>
  </body>
</html>

Completed
Last Updated: 20 Jan 2022 12:30 by ADMIN
Release 2021.R2.SP1

Bug report

A DataSource defined using TagHelpers with disabled serverPaging sets default pageSize:

    <datasource type="DataSourceTagHelperType.Ajax" server-filtering="true" server-paging="false">
            <transport>
                <read url="@Url.Page("Index", "Read")" data="forgeryToken" />
            </transport>
            <schema data="Data">
                <model id="OrderID">
                    <fields>
                        <field name="ShipName" type="string"></field>
                    </fields>
                </model>              
            </schema>
     </datasource>

generates the following initialization script:

{"dataSource":{"page":1,"pageSize":20,"schema":{"model":{"id":"OrderID","fields":{"ShipName":{"type":"string"}}},"data":"Data","errors":"Errors","total":"Total"},"serverAggregates":true,"serverFiltering":true,"serverGrouping":true,"serverPaging":true,"serverSorting":true,"transport":{"read":{"url":"/?handler=Read","data":forgeryToken}},"type":(function(){if(kendo.data.transports['aspnetmvc-ajax']){return 'aspnetmvc-ajax';} else{throw new Error('The kendo.aspnetmvc.min.js script is not included.');}})()}

with default pageSIze set.
Initializing using jQuery works as expected:

       dataSource: {
            type: "aspnetmvc-ajax",
            serverPaging: false,
            serverFiltering:true,
            transport: {
                read: {
                    url: "@Url.Page("Index", "Read")",
                    data: forgeryToken
                }
            },
            schema: {
                model: {
                    id:"OrderID"
                },
                data: "Data",
                total:"Total"
            }
        }

Current behavior

The "page" and "pageSize" values are set, which results in only 20 items being displayed, even though more are returned by the "read" action.

Expected/desired behavior

The "page" and "pageSize" should not be set.

Environment

  • Kendo UI version: 2021.1.330
  • Browser: [all]
1 2 3 4