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:
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;
}
}
Please consider adding a pluggable runtime localization provider for Telerik UI for Blazor, primarily targeting Blazor WebAssembly scenarios.
This request is not critical for ASP.NET MVC / Razor / Blazor Server, where IDisplayMetadataProvider already provides a valid extensibility point for custom localization. However, Blazor WebAssembly has no equivalent mechanism, which creates a significant limitation.
In Blazor WebAssembly:
DisplayAttribute is static and reflection‑basedIDisplayMetadataProvider are not availableAs a result, Telerik components can only resolve UI text via:
DisplayAttribute.resx resourcesThis makes it impossible to integrate:
In modern Blazor WebAssembly (SPA) applications, localization is often:
Other libraries already support this model through pluggable localization providers.
A good example is FluentValidation, which allows localization logic to be resolved at runtime via DI, including custom providers and non‑resource‑based implementations.
References:
Because Telerik UI for Blazor does not expose a similar extensibility point, developers are forced to manually specify labels, headers, and enum texts throughout the UI, losing the benefits of automatic localization.
Introduce an optional localization provider that Telerik components can use when resolving UI text:
DisplayAttributeThis would significantly improve Telerik UI’s suitability for enterprise and multi‑tenant Blazor WASM applications, without impacting existing server‑side solutions.
The problem with the extra characters at the beginning of the PDF document has resurfaced.
The bytes returned by GetFileAsync() don't start with %PDF-, but with JS.ReceiveByteArray. Some PDF readers and my antivirus flag the file as corrupt or suspicious. I worked around it by stripping everything before the first %PDF- occurrence in the bytes before writing to disk.
I use TelerikPdfViewer to let my users annotate PDF documents (highlights, text boxes, drawings). Since the component only provides a built-in Download button (client-side) and not a Save to backend, I implemented a custom Save button that:
1. Calls await pdfViewerRef.GetFileAsync() to retrieve th e annotated PDF as byte[].
2. Sends the bytes to my server via a Blazor service call.
3. The server persists them to a file share with File.WriteAllBytesAsync(path, bytes).
Simplified:
<PdfViewerToolBarCustomTool>
<TelerikButton OnClick="@SaveAnnotationsAsync">Save</TelerikButton>
</PdfViewerToolBarCustomTool>
var annotatedPdf = await pdfViewerRef.GetFileAsync();
await _scanFlowApi.SaveAnnotatedDocumentAsync(documentId, annotatedPdf);
// server-side: await File.WriteAllBytesAsync(path, annotatedPdf, ct);
It works — the annotations are saved and I can reopen the file in the viewer without issues. But after saving and opening the file in Adobe Reader, closing it shows the prompt "Do you want to save the changes made to this document?" — even though the user hasn't modified anything in Adobe. The PDF seems to contain incremental updates appended at the end.
Related to https://docs.telerik.com/blazor-ui/knowledge-base/grid-bind-navigation-property-complex-object
However I'm looking to do this for the Combobox, i.e.
<TelerikComboBox Data="@Users"
@bind-Value="@FormElement.UserInitials"
ValueField="Dto.UserInitials"
TextField="Dto.UserInitials"
>
</TelerikComboBox>
public class Users
{
//bunch of properties
public UserSubProperties Dto {get; set;}
}
public class UserSubProperties
{
public string UserInitials {get; set;}
}
With `PersistTabContent="true"`, when tabs start with `Visible="false"` and later become `Visible="true"`, all visible tab contents are instantiated simultaneously instead of only the active tab.
Reproduction:
@page "/TestPage"
<button @onclick="Load">Load</button>
<TelerikTabStrip PersistTabContent="true">
<TabStripTab Title="Tab 1" Visible="@_tabsVisible">
<TestInitComponent Message="Hello from tab1" />
</TabStripTab>
<TabStripTab Title="Tab 2" Visible="@_tabsVisible">
<TestInitComponent Message="Hello from tab2" />
</TabStripTab>
<TabStripTab Title="Tab 3" Visible="@_tabsVisible">
<TestInitComponent Message="Hello from tab3" />
</TabStripTab>
</TelerikTabStrip>
@code {
private bool _tabsVisible = false;
private void Load()
{
_tabsVisible = true;
}
}TestInitComponent.razor
<h3>TestInitComponent</h3>
@code {
[Parameter]
public string Message { get; set; } = string.Empty;
protected override void OnInitialized()
{
base.OnInitialized();
Console.WriteLine($"TestInitComponent OnInitialized {Message}");
}
}Steps: Open page → click Load.
Hi Support,
I have an issue with the DragToSelect feature of a Telerik grid in Blazor when this grid is inside a TelerikWindow.
Summary
When a TelerikGrid configured with GridSelectionSettings DragToSelect="true" is rendered inside the <WindowContent> of a <TelerikWindow>, the drag-to-select (rubber-band) behavior is not working properly — the user can only select cells/rows via individual clicks.
Single-click selection continues to work in both cases. The issue is specific to the drag gesture.
Steps to reproduce
Create a page with a TelerikWindow set to Visible="true".
Inside <WindowContent>, place a TelerikGrid with:
SelectionMode="@GridSelectionMode.Multiple"
SelectedCells / SelectedCellsChanged bound
<GridSettings><GridSelectionSettings SelectionType="@GridSelectionType.Cell" DragToSelect="true" /></GridSettings>
Open the window and try to select multiple cells by pressing the mouse button on a cell and dragging over neighboring cells.
Expected behavior
A rubber-band selection rectangle appears and all cells the pointer passes over become selected — same as when the identical grid is placed on a regular page (outside a modal window).
Actual behavior
Drag selection occur rarely. Only the single cell under the initial mousedown gets selected. The rubber-band rectangle rarely appears, and SelectedCellsChanged fires with a single descriptor instead of the full drag range.
Minimal repro (REPL-ready)
<TelerikWindow Visible="true" Width="800px" Height="500px">
<WindowTitle>Repro</WindowTitle>
<WindowContent>
<TelerikGrid Data="@Data" TItem="SampleItem"
SelectionMode="@GridSelectionMode.Multiple"
SelectedCells="@SelectedCells"
SelectedCellsChanged="@((IEnumerable<GridSelectedCellDescriptor> c) => SelectedCells = c)">
<GridSettings>
<GridSelectionSettings SelectionType="@GridSelectionType.Cell" DragToSelect="true" />
</GridSettings>
<GridColumns>
<GridColumn Field="@nameof(SampleItem.Id)" />
<GridColumn Field="@nameof(SampleItem.Name)" />
</GridColumns>
</TelerikGrid>
</WindowContent>
</TelerikWindow>
@code {
public record SampleItem(int Id, string Name);
private List<SampleItem> Data = Enumerable.Range(1, 20).Select(i => new SampleItem(i, $"Item {i}")).ToList();
private IEnumerable<GridSelectedCellDescriptor> SelectedCells = Enumerable.Empty<GridSelectedCellDescriptor>();
}
Now my questions :
- Is this a known limitation of DragToSelect when the grid is inside a modal TelerikWindow?
- Is there an officially supported workaround (CSS pointer-events tweak on .k-overlay, event capture override, grid setting, etc.)?
- If it is a bug, could you open a public issue we can track?
Many thanks you in advance.
Franck Boisdé
(bug report only)
Regression introduced in 13.0.0.
1. Run this example: https://blazorrepl.telerik.com/wUuSGClv00orFeRm59
(optional)
The Size, Rounded, FillMode parameters are ignored.
The parameter values should apply and change the appearance of the SearchBox.
Three methods in Telerik.Blazor.Extensions.ReflectionExtensions call target.GetType() without first checking whether target is null. When a null object reaches any of these methods (e.g. via ConvertToFileEntry receiving a null data item), a NullReferenceException is thrown. Consider adding a null return/guard, which will prevent the exception.
Affected methods:
HasGetter
GetPropertyValue
SetPropertyValue
Proposed change:
Add an early null return/guard for target in each method, consistent with the existing null check for propertyName:
public static bool HasGetter(this object target, string propertyName)
{
if (target == null || propertyName == null)
{
return false;
}
// ...
}
public static object GetPropertyValue(this object target, string propertyName)
{
if (target == null || propertyName == null)
{
return null;
}
// ...
}
public static void SetPropertyValue(this object target, string propertyName, object value)
{
if (target == null)
{
return;
}
// ...
}Expected outcome
(Also applies to AutoComplete, DropDownList, MultiSelect, MultiColumnComboBox).
When using Height="auto" in the popup settings and filtering with a dropdown above the component, the dropdown detaches from the main component.
<ComboBoxPopupSettings Height="auto"></ComboBoxPopupSettings>https://blazorrepl.telerik.com/cKkSQGFO50ovCpr829
A possible workaround is to use a MaxHeight that is less than half the browser viewport.
<ComboBoxPopupSettings Height="auto" MaxHeight="45vh"></ComboBoxPopupSettings>
Example:
<PageTitle>Home</PageTitle>
<div>
<TelerikTextBox Width="20rem" Placeholder="Pallet" DebounceDelay="1000" @bind-Value="@_textInput" OnChange="@(async (input) => await OnInputChanged(input))" />
</div>
<p>@_textInput</p>
@code {
private string? _textInput;
private async Task OnInputChanged(object input)
{
Console.WriteLine($"Immediate: function parameter: {input}, bound variable: {_textInput}");
await Task.Delay(1000);
Console.WriteLine($"Delayed: function parameter: {input}, bound variable: {_textInput}");
//Make the OnChange event receive the immediate value when the DebounceDelay is set
}
}The DebounceDelay is set to 1 second to highlight the behavior, although we have observed it with delays less than 100 milliseconds when the input is from a barcode scanner and the Enter is part of the scan. Start the sample, type "123" in the input, and hit enter within 1 second.
The output in the console is:
Immediate: function parameter: , bound variable:
Delayed: function parameter: , bound variable: 123
Introduced in v13.1.0. An item that has no text (empty string) renders a span (.k-list-item-text) with height 0px.
Steps to reproduce the behavior:
Also reproducible in: https://dojo.telerik.com/ZVOXYUsb/3
The item that has no text should have the same height as items that have text.
The height of the span.k-list-item-text is 0px.
Please specify the component(s) where the bug occurs: ___________
https://blazorrepl.telerik.com/mgEobKlm00OJm8OW55
https://dojo.telerik.com/ZVOXYUsb/3
<TelerikDropDownList Data="@DropDownListData" @bind-Value="DropDownListValue" />
@code {
private List<string> DropDownListData = new List<string>() { "Item1", string.Empty, "Item3" };
private string DropDownListValue { get; set; } = string.Empty;
protected override void OnInitialized()
{
DropDownListValue = string.Empty;
}
}<style>
.k-list-item-text {
min-height: 20px;
}
</style>
I have a cascading DropDownList scenario with virtual scrolling. When the first DropDownList changes value, the second one should reset its scrollbar to the top, because it now contains new data. This doesn't happen.
Here is a REPL test page.
===
ADMIN EDIT
===
As a workaround for the time being, you may track when the value is changed in the parent DropDownList to dispose and re-initialize the child DropDownList.
Here is an example: https://blazorrepl.telerik.com/mdafHabk585ZtzyV54.
I have been having issues adding the month view to a Telerik Blazor scheduler component, when there is grouping. It gives a null reference error any time I try to switch to the month view. I also tried it using the available demo for grouping in Telerik REPL, the only difference I found between my code and the demo was that I had used the ItemsPerSlot parameter. I added this to the demo, and was able to reproduce the error I was seeing, and I have attached the console output from the REPL demo. I believe there is either a bug with the ItemsPerSlot being used in conjunction with grouping on a scheduler component, or some instruction missing from how to set it up properly to prevent this null reference issue.
Changed code:
<SchedulerMonthView ItemsPerSlot="5"></SchedulerMonthView>
Demo used:
Blazor Scheduler (Event Calendar) Demos - Grouping | Telerik UI for Blazor
Goal
Our application needs to allow end users to dynamically customize the Telerik Blazor DockManager at runtime by:
These changes should be fully user-driven and persisted so that:
In short, we want the DockManager to behave as a customizable dashboard whose state can be reliably stored and reloaded from our database.
Problem
The current Telerik Blazor DockManager implementation requires panels to be declared in Razor markup (markup driven) and managed through an external data source.
This creates several challenges:
As a result, implementing a truly dynamic and persistent DockManager layout requires complex workarounds that are fragile and difficult to maintain.
Feature Request
We propose enhancing the DockManager with first-class support for dynamic panel synchronization by introducing:
Two coordinated parameters:
Expected behavior:
This would allow developers to treat the DockManager as a true data-driven component, similar to other Telerik Blazor controls, without needing to manually modify internal state structures.