Completed
Last Updated: 02 Apr 2026 16:45 by Jonathan
Release 2025 Q3 (Aug)
Created by: Stefan
Comments: 2
Category: Upload
Type: Bug Report
8

Description

File data is not available in the Upload's OnSuccess event.

Regression in version 9.0.0 introduced with the addition of the chunk upload functionality.

https://github.com/telerik/blazor/blob/master/js/telerik-blazor/src/upload/upload.ts#L282-L288

Steps To Reproduce

  1. Attach a handler to the OnSuccess event:
<TelerikUpload SaveUrl="/api/upload/save"
               RemoveUrl="/api/upload/remove"
               OnSuccess="@OnSuccessHandler" />

@code {
    async Task OnSuccessHandler(UploadSuccessEventArgs e)
    {
        foreach (var file in e.Files)
        {
            Console.WriteLine($"Name = {file.Name}, Size = {file.Size}, Extension = {file.Extension}");
        }

        StateHasChanged();
    }
}
  1. Upload a file and try to access its Name, Size, and Extension properties in the event handler.

Actual Behavior

The properties have their default values (null for Name and Extension and 0 for Size).

Expected Behavior

The actual file data is accessible in the OnSuccess event handler.

Browser

All

Last working version of Telerik UI for Blazor (if regression)

8.1.1

Completed
Last Updated: 02 Apr 2026 06:55 by ADMIN
Release 2026 Q2
When the floating pane is initially set to Visible=false, docking no longer works after it is shown.
Planned
Last Updated: 01 Apr 2026 06:19 by ADMIN
Scheduled for 2026 Q2

When SchedulerGroupOrientation is set to vertical, increasing the height of the `SchedulerResourceGroupHeader` breaks the rendering of the Scheduler cells, which causes misalignment of the appointments. In my scenario, I want to have a Button and an Icon in the group header cell.

Reproduction example: https://blazorrepl.telerik.com/wJElGYvF02XSsN6j42

Declined
Last Updated: 31 Mar 2026 09:43 by ADMIN

Issue: Opening and closing a window will cause the window to reopen with each following OnClick. This seems to have been introduced with the upgrade to .net10

Code: Below is an example used on the basic Telerik Blazor template. Copy this and replace Home.razor with it.

@page "/"

<PageTitle>Telerik Blazor App | Home</PageTitle>

<div id="home-page">
    <HomeSvg />

    <h1>Hello, Telerik UI for Blazor!</h1>

    <p>Welcome to your new Telerik Blazor app.</p>

    <TelerikButton OnClick="OpenWindow1">Click Here First</TelerikButton>
    <TelerikButton OnClick="OpenWindow2">Click Here Second</TelerikButton>
    <TelerikButton OnClick="@(async () => {await Task.Delay(100);})">Unrelated OnClick</TelerikButton>


</div>

<TelerikWindow Visible="ShowWindow1">
    <WindowActions>
        <WindowAction OnClick="CloseWindow1" Name="Close"></WindowAction>
    </WindowActions>
    <WindowContent>
        <span>Moving window now will help find this window in next step, but not necessary to replicate bug.</span>
        <br />
        <span>Close window using 'X'.</span>
    </WindowContent>
</TelerikWindow>

<TelerikWindow Visible="ShowWindow2">
    <WindowActions>
        <WindowAction OnClick="CloseWindow2" Name="Close"></WindowAction>
    </WindowActions>
    <WindowContent>
        <span>Window 1 shouldn't be appearing now, but it it is. Window 1 may be behind this window if you didn't drag in previous step.</span>
        <br />
        <span>If you close these windows, and click the 'Unrelated OnClick' button, both of these windows will reappear, despite just firing Task.Delay(100)</span>
    </WindowContent>
</TelerikWindow>

<style>
    #home-page {
        margin-left: auto;
        margin-right: auto;
        max-width: max-content;
        text-align: center;
        font-size: var(--kendo-font-size-xl);
    }

    @@media (min-height: calc(56px + 50px + 400px)) {
        /* header + footer + home page container*/
        #home-page {
            margin-top: calc(50vh - 28px - 25px - 200px);
        }
    }
</style>

@code {
    public bool ShowWindow1 { get; set; }
    public bool ShowWindow2 { get; set; }

    public async Task OpenWindow1()
    {
        ShowWindow1 = true;
    }

    public async Task OpenWindow2()
    {
        ShowWindow2 = true;
    }

    public void CloseWindow1()
    {
        ShowWindow2 = false;
        StateHasChanged();
    }

    public void CloseWindow2()
    {
        ShowWindow2 = false;
    }
}


Unplanned
Last Updated: 30 Mar 2026 09:45 by ADMIN
Scheduled for 2026 Q2

When ActiveTabId is null, the TabStrip selects the first tab automatically, but does not render its content.

<TelerikTabStrip @bind-ActiveTabId="@TabStripActiveTabId">
    <TabStripTab Title="First" Id="t1">
        First tab content.
    </TabStripTab>
    <TabStripTab Title="Second" Id="t2">
        Second tab content.
    </TabStripTab>
    <TabStripTab Title="Third" Id="t3">
        Third tab content.
    </TabStripTab>
</TelerikTabStrip>

@code {
    private string? TabStripActiveTabId { get; set; }
}

Unplanned
Last Updated: 30 Mar 2026 06:16 by ADMIN
Scheduled for 2026 Q2
I am using a bool property to control whether the columns of the Grid would be virtualized. When I try to toggle the value of this property the feature is not enabled or disabled accordingly. 
In Development
Last Updated: 27 Mar 2026 14:34 by ADMIN
Scheduled for 2026 Q2
In our serverside blazor application we use the Telerik's DateTimePicker. When we type values in to the date time picker control, it jumps to the next section or to the end before completing the currect section. We use the format 'yyyy-MM-dd HH:mm'

It does not happen always and I think it is happenning when the internet connection is slow and it shows a Javascript error as well (screenshots below)
Completed
Last Updated: 26 Mar 2026 12:49 by ADMIN
Release 2026 Q2

Set the PdfViewer document (data) value to null. As a result, an endless loader will appear.

===

ADMIN EDIT

===

A possible workaround for the time being is to re-initialize the component after clearing the file: https://blazorrepl.telerik.com/cHYwQola24zzBOAd02.

Completed
Last Updated: 26 Mar 2026 07:28 by ADMIN
Release 2026 Q2
Created by: Robert
Comments: 3
Category: Grid
Type: Bug Report
0
A virtual Grid does not handle well dynamic RowHeight changes. The virtual scrollbar is not refreshed and scrolling breaks.
Unplanned
Last Updated: 25 Mar 2026 13:06 by ADMIN
Scheduled for 2026 Q2

Description

When the dropdown is open, the button's aria-controls attribute references a value that matches the popup's data-id, not its actual id. Since aria-controls must point to an element's id, the attribute is invalid and no element in the DOM matches the reference, breaking the accessible relationship between the button and its popup. 

Button renders:

aria-controls="50dc5df2-b83e-41bd-8c34-98470aba77c6"

Popup element has:

data-id="50dc5df2-b83e-41bd-8c34-98470aba77c6"
id="8630d4e4-2f22-4eaf-b96c-7cae113b70ed"

Steps to Reproduce

  1. Add a TelerikDropDownButton using the standard Telerik example (source below).
  2. Open the dropdown and inspect the HTML or run a Lighthouse audit.
<TelerikDropDownButton Icon="@SvgIcon.Share" OnClick="@(()=>OnItemClick("Primary"))">
    <DropDownButtonContent>Share</DropDownButtonContent>
    <DropDownButtonItems>
        <DropDownButtonItem Icon="@SvgIcon.Facebook" OnClick="@(()=>OnItemClick("Facebook"))">Facebook</DropDownButtonItem>
        <DropDownButtonItem Icon="@SvgIcon.Twitter" OnClick="@(()=>OnItemClick("Twitter"))">Twitter</DropDownButtonItem>
        <DropDownButtonItem Icon="@SvgIcon.Linkedin" OnClick="@(()=>OnItemClick("Linkedin"))">Linkedin</DropDownButtonItem>
        <DropDownButtonItem Icon="@SvgIcon.Reddit" OnClick="@(()=>OnItemClick("Reddit"))">Reddit</DropDownButtonItem>
    </DropDownButtonItems>
</TelerikDropDownButton>


Declined
Last Updated: 25 Mar 2026 11:23 by ADMIN
Scheduled for 2026 Q2

DatePicker cursor not advancing after month input. The problem arises when dd/MMM/yyyy format is applied.

To reproduce the issue open this REPL example. Type any date in the second DatePicker. When inserting a month value the cursor is not moved to the year section.

After inserting a month the cursor should be moved to the year section. As when no format is applied (the first DatePicker)
Completed
Last Updated: 24 Mar 2026 14:04 by ADMIN
Release 2026 Q2
Created by: Ola
Comments: 0
Category: MultiColumnComboBox
Type: Bug Report
2
We are using the TelerikMultiColumnComboBox in AdaptiveMode.Auto and with an OnRead filter.

On small viewports and entering something in the searchbox, the key is cleared after entering just one char. This is only happening in the mobile view, otherwise it works fine and one can enter more characters.
Completed
Last Updated: 24 Mar 2026 14:03 by ADMIN
Release 2026 Q2

The Tooltip component throws a JavaScript error when the user opens an adaptive dropdown component and tries to interact with it:

Uncaught TypeError: popup.isParent is not a function

Here is a test page. Open the DropDownList on a narrow screen and click on the adaptive ActionSheet.

 

<TelerikButton Class="tooltip-target" Title="Telerik Tooltip">Button</TelerikButton>

<TelerikDropDownList Data="@ListItems"
                     @bind-Value="@SelectedValue"
                     TextField="@nameof(ListItem.Text)"
                     ValueField="@nameof(ListItem.Id)"
                     AdaptiveMode="@AdaptiveMode.Auto"
                     Width="300px" />
<TelerikTooltip TargetSelector=".tooltip-target"
                ShowOn="@TooltipShowEvent.Hover" />

@code {
    private List<ListItem> ListItems { get; set; } = new();

    private int SelectedValue { get; set; } = 3;

    protected override void OnInitialized()
    {
        ListItems = new List<ListItem>();
        for (int i = 1; i <= 5; i++)
        {
            ListItems.Add(new ListItem()
            {
                Id = i,
                Text = $"Item {i}",
                Category = $"Category {i % 6 + 1}"
            });
        }
        base.OnInitialized();
    }

    public class ListItem
    {
        public int Id { get; set; }
        public string Text { get; set; } = string.Empty;
        public string Category { get; set; } = string.Empty;
    }
}

 

Planned
Last Updated: 24 Mar 2026 13:31 by ADMIN
Scheduled for 2026 Q2

How to reproduce:

  1. Go to https://demos.telerik.com/blazor-ui/grid/editing-incell
  2. Go to the last Grid page, which has empty space below the last table row.
  3. Open any Grid cell for editing.
  4. Click on the empty space in the Grid below the last table row.
  5. The Grid does not exit edit mode like it should.

The regression was introduced in version 12.2.0. The last version that works correctly is 12.0.0.

The possible workarounds are:

@using System.ComponentModel.DataAnnotations
@using Telerik.DataSource
@using Telerik.DataSource.Extensions

<TelerikGrid @ref="@GridRef"
             OnRead="@OnGridRead"
             TItem="@Product"
             EditMode="@GridEditMode.Incell"
             OnCreate="@OnGridCreate"
             OnDelete="@OnGridDelete"
             OnUpdate="@OnGridUpdate"
             Height="600px">
    <GridToolBarTemplate>
        <GridCommandButton Command="Add">Add Item</GridCommandButton>
    </GridToolBarTemplate>
    <GridColumns>
        <GridColumn Field="@nameof(Product.Name)">
            <EditorTemplate>
                @{ var dataItem = (Product)context; }
                <span @onfocusout="@( async () => await OnGridCellFocusOut(nameof(Product.Name)) )">
                    <TelerikTextBox @bind-Value="@dataItem.Name" />
                </span>
            </EditorTemplate>
        </GridColumn>
        @* <GridColumn Field="@nameof(Product.Price)" DisplayFormat="{0:C2}" />
        <GridColumn Field="@nameof(Product.Quantity)" DisplayFormat="{0:N0}" />
        <GridColumn Field="@nameof(Product.ReleaseDate)" DisplayFormat="{0:d}" /> *@
        <GridColumn Field="@nameof(Product.Discontinued)" Width="120px">
            <EditorTemplate>
                @{ var dataItem = (Product)context; }
                <span @onfocusout="@( async () => await OnGridCellFocusOut(nameof(Product.Discontinued)) )">
                    <TelerikCheckBox @bind-Value="@dataItem.Discontinued" />
                </span>
            </EditorTemplate>
        </GridColumn>
        <GridCommandColumn Width="180px">
            <GridCommandButton Command="Delete">Delete</GridCommandButton>
        </GridCommandColumn>
    </GridColumns>
</TelerikGrid>

@code {
    private TelerikGrid<Product>? GridRef { get; set; }

    private ProductService GridProductService { get; set; } = new();

    private async Task OnGridCellFocusOut(string field)
    {
        await Task.Delay(100);

        if (GridRef is null)
        {
            return;
        }

        GridState<Product> gridState = GridRef.GetState();
        Product? editItem = gridState.EditItem as Product;

        if (editItem is null)
        {
            return;
        }

        GridCommandEventArgs args = new GridCommandEventArgs()
        {
             Field = field,
             Item = editItem
        };

        await OnGridUpdate(args);


        gridState.EditField = default;
        gridState.EditItem = default!;
        gridState.OriginalEditItem = default!;

        await GridRef.SetStateAsync(gridState);
    }

    private async Task OnGridCreate(GridCommandEventArgs args)
    {
        var createdItem = (Product)args.Item;

        await GridProductService.Create(createdItem);
    }

    private async Task OnGridDelete(GridCommandEventArgs args)
    {
        var deletedItem = (Product)args.Item;

        await GridProductService.Delete(deletedItem);
    }

    private async Task OnGridRead(GridReadEventArgs args)
    {
        DataSourceResult result = await GridProductService.Read(args.Request);

        args.Data = result.Data;
        args.Total = result.Total;
        args.AggregateResults = result.AggregateResults;
    }

    private async Task OnGridUpdate(GridCommandEventArgs args)
    {
        var updatedItem = (Product)args.Item;

        await GridProductService.Update(updatedItem);
    }

    public class Product
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; } = string.Empty;
        public string Description { get; set; } = string.Empty;
        public decimal? Price { get; set; }
        public int Quantity { get; set; }
        [Required]
        public DateTime? ReleaseDate { get; set; }
        public bool Discontinued { get; set; }
    }

    #region Data Service

    public class ProductService
    {
        private List<Product> Items { get; set; } = new();

        private int LastId { get; set; }

        public async Task<int> Create(Product product)
        {
            await SimulateAsyncOperation();

            product.Id = ++LastId;

            Items.Insert(0, product);

            return LastId;
        }

        public async Task<bool> Delete(Product product)
        {
            await SimulateAsyncOperation();

            if (Items.Contains(product))
            {
                Items.Remove(product);

                return true;
            }

            return false;
        }

        public async Task<List<Product>> Read()
        {
            await SimulateAsyncOperation();

            return Items;
        }

        public async Task<DataSourceResult> Read(DataSourceRequest request)
        {
            return await Items.ToDataSourceResultAsync(request);
        }

        public async Task<bool> Update(Product product)
        {
            await SimulateAsyncOperation();

            int originalItemIndex = Items.FindIndex(x => x.Id == product.Id);

            if (originalItemIndex != -1)
            {
                Items[originalItemIndex] = product;
                return true;
            }

            return false;
        }

        private async Task SimulateAsyncOperation()
        {
            await Task.Delay(100);
        }

        public ProductService(int itemCount = 5)
        {
            Random rnd = Random.Shared;

            for (int i = 1; i <= itemCount; i++)
            {
                Items.Add(new Product()
                {
                    Id = ++LastId,
                    Name = $"Product {LastId}",
                    Description = $"Multi-line\ndescription {LastId}",
                    Price = LastId % 2 == 0 ? null : rnd.Next(0, 100) * 1.23m,
                    Quantity = LastId % 2 == 0 ? 0 : rnd.Next(0, 3000),
                    ReleaseDate = DateTime.Today.AddDays(-rnd.Next(365, 3650)),
                    Discontinued = LastId % 2 == 0
                });
            }
        }
    }

    #endregion Data Service
}

 

Planned
Last Updated: 24 Mar 2026 13:30 by ADMIN
Scheduled for 2026 Q2

When you select a date in DropDownList with dates in it (List<DateTime>), the @bind-Value is shaving off the milliseconds.

 

===ADMIN EDIT===

In the meantime, as a workaround for displaying milliseconds correctly, you can bind the DropDownList to a model. This way, you can use the "Id" to retrieve the selected item and display its precise milliseconds. Below is an example I've prepared to demonstrate this approach:

Selected value: @myDdlData.ToList().Where(x => x.Id == selectedValueId).FirstOrDefault()?.MyValueField.ToString("MM/dd/yyyy HH:mm:ss.fff")
<br />

<TelerikDropDownList Data="@myDdlData" 
                     TextField="MyTextField" 
                     ValueField="Id" 
                     @bind-Value="selectedValueId">
</TelerikDropDownList>

@code {
    public class MyDdlModel
    {
        public int Id { get; set; }
        public DateTime MyValueField { get; set; }
        public string MyTextField => MyValueField.ToString("MM/dd/yyyy HH:mm:ss.fff"); // Display formatted DateTime
    }

    private int selectedValueId { get; set; } = 1;

    private IEnumerable<MyDdlModel> myDdlData = GenerateRandomDateTimes(20);

    private static IEnumerable<MyDdlModel> GenerateRandomDateTimes(int count)
    {
        Random random = new Random();
        DateTime startDate = DateTime.Now;

        return Enumerable.Range(1, count)
            .Select(x => new MyDdlModel
            {
                Id = x, // Unique integer Id
                MyValueField = startDate.AddDays(x)
                    .AddMinutes(random.Next(0, 60))
                    .AddSeconds(random.Next(0, 60))
                    .AddMilliseconds(random.Next(0, 1000))
            }).ToList();
    }
}

Declined
Last Updated: 24 Mar 2026 10:04 by ADMIN
Enter "01" in the "hour" section. You’ll notice that the cursor does not automatically move to the next section until another digit is entered.
Completed
Last Updated: 23 Mar 2026 21:38 by Lance
Release 6.1.0

In a filterable Grid, if a column is not bound to a field from the model the Grid uses, it throws with:

Error: System.ArgumentNullException: Value cannot be null. (Parameter 'nullableType')

Reproduction: https://blazorrepl.telerik.com/GyEUlFEs04AUJoJ601.

The issue is reproducible :

  • For `FilterRow` -  on initialization even if the column is not filterable.
  • For `FilterMenu` - on initialization when the column is filterable.

===

ADMIN EDIT

===

A possible workaround for the time being is to set the FieldType of the column: https://blazorrepl.telerik.com/wSugvFui10jhcpZy00.


Unplanned
Last Updated: 23 Mar 2026 12:12 by Next

If the ComboBox Value is set during initialization and the ValueMapper executes too fast and before the component has rendered, its Value doesn't show.

The problem also occurs in the MultiColumnComboBox.

Possible workarounds:

  • Set the component Value a bit later.
  • Delay the ValueMapper execution until OnAfterRenderAsync fires.
  • Rebind() the ComboBox in OnAfterRenderAsync. This will fire OnRead again.
  • Render the ComboBox conditionally in the first OnAfterRenderAsync call.

To reproduce:

@using Telerik.DataSource
@using Telerik.DataSource.Extensions

<p>ComboBox Value: @ComboBoxValue</p>

<TelerikComboBox ItemHeight="30"
                 OnRead="@OnComboBoxRead"
                 PageSize="20"
                 ScrollMode="@DropDownScrollMode.Virtual"
                 TItem="@ListItem"
                 TValue="@(int?)"
                 @bind-Value="@ComboBoxValue"
                 ValueMapper="@ComboBoxValueMapper"
                 Width="240px" />

@code {
    private List<ListItem>? ComboBoxData { get; set; }

    private int? ComboBoxValue { get; set; } = 3;

    private async Task OnComboBoxRead(ReadEventArgs args)
    {
        DataSourceResult result = await ComboBoxData.ToDataSourceResultAsync(args.Request);

        args.Data = result.Data;
        args.Total = result.Total;
    }

    private async Task<ListItem?> ComboBoxValueMapper(int? selectValue)
    {
        // Triggers the bug
        await Task.Yield();

        ListItem? result = ComboBoxData?.FirstOrDefault(x => selectValue == x.Value);

        return result;
    }

    protected override void OnInitialized()
    {
        ComboBoxData = Enumerable
            .Range(1, 1234)
            .Select(x => new ListItem()
                {
                    Value = x,
                    Text = $"Item {x}"
                })
            .ToList();
    }

    public class ListItem
    {
        public int Value { get; set; }
        public string Text { get; set; } = string.Empty;
    }
}

In Development
Last Updated: 20 Mar 2026 07:23 by ADMIN
Scheduled for 2026 Q2

I am resetting the Grid State by calling Grid.SetState(null). This doesn't reset ColumnState<T>.Locked boolean to false and the columns remain locked.

---

ADMIN EDIT

---

A possible workaround for the time being is to additionally loop through the ColumnStates collection of the State and set the Locked property to false for each column.

Example: https://blazorrepl.telerik.com/QTYmkpvb49c6CPxa42

Unplanned
Last Updated: 19 Mar 2026 15:27 by Peter

Bug report

Reproduction of the problem

Possibly related to https://github.com/telerik/blazor/issues/2594

  1. Run this example: https://blazorrepl.telerik.com/wAkdbZPo47oCuV5G32
  2. Without scrolling the Grid horizontally resize a non-locked column (e.g., In Stock)

Current behavior

(optional)

The first locked column (ID) is rendered after the second locked column (Product Name). When you resize a non-locked column, the ID column disappears and is revealed at its new position after you scroll the Grid horizontally.
The behavior is reproducible with RTL enabled.

Expected/desired behavior

The order of the locked columns should persist.

Environment

  • Telerik version: 13.0.0
  • Browser: [all]
1 2 3 4 5 6