A property to handle that would be very convenient. This way developers could be able to restrict the number of rows that the user can type. Something like MaxRowNumber. Additionally, a property MaxColumnNumber would be also useful to restrict the length of each row.
Regression introduced in: 2025.4.1111
When RadEditor is in HTML mode, calling get_html() without parameters modifies self-closing tags in the returned content.
According to the documented API behavior, the RadEditor client filters should modify the returned content only when the isFiltered argument is set to true. However, the content is currently passed through browser DOM serialization even when filtering is not requested. This normalizes HTML void elements and removes the XHTML self-closing slash.
Steps to reproduce
<img alt="" src="image.png" />
Actual result
The returned markup is modified and the self-closing slash is removed:
<img alt="" src="image.png">
Expected result
When filtering is not requested, the content entered in HTML mode should be returned without filter-related DOM serialization:
<img alt="" src="image.png" />
Calling editor.get_html(true) may modify the returned content according to the enabled RadEditor client filters.
Impact
Applications that store, compare, validate, or further process XHTML-compatible markup may receive content different from the source entered by the user. This can affect integrations that rely on self-closing tag syntax.
The RadEditor Add Link dialog uses HTML tables for layout, but the tables are exposed with data-table semantics.
The dialog contains:
Because these tables are used to arrange form fields and buttons rather than display tabular data, screen readers and automated accessibility tools may interpret them as data tables. The hidden headers are removed from the accessibility tree and do not provide useful table semantics. The nested table may also result in redundant or confusing table announcements.
This causes WCAG 2.1 accessibility findings related to table semantics, including F49 and F91 under Section 508.
Hi!
I use .resx file to change Gantt labels with italian translation.
Everything works as expected with the exception of the assign resources button in advanced form (see attachment).
I tried to set declaratively with the Localization-AdvancedAssignResources property but it doesn't work.
Thanks in advance.
Mattia
RadGrid’s SEO Paging activates for normal users in the latest Brave browser, because sessions are misclassified as crawlers (Request.Browser.Crawler evaluates to true).
Even with PagerStyle.EnableSEOPaging set to False, SEO paging still turns on due to crawler detection, and ask whether the legacy Request.Browser.Crawler approach should be removed for ASP.NET WebForms in Telerik.
When EnableSEOPaging is True, query string paging is always used, but when False, the grid still enables SEO paging upon crawler detection, which is being incorrectly triggered in Brave.
Smart Paste Component is adding ALL controls on the page to the FormFields Json sent to the LLM, not just those with the SmartPasteDescription populated. This is causing the JSON to balloon as the user accesses more tabs on the page that have more controls.
Eventually this causes the LLM to run out of context size and stop functioning.
Please either fix this, or add a flag to disable auto discovery and allow us to just manually add the fields only.
To Recreate... have a page with a few telerik controls and a rad tab strip. Do a smart paste request.
Next click on the other tabs with more fields. Do another smart paste request. Those new fields are also added.
NONE of these fields have smart paste description fields.
There is a bug with combining scripts and resources:
Combined CDN Request for Telerik Controls
You can reproduce the issue in the attached web site sample.
Component: RadFilter ( RadFilterExpressionConverter , RadFilterExpressionSerializer )
Affected: 2026.2.708 and later, where the JSON serializer replaced the Newtonsoft one
Description:
RadFilterExpressionConverter.IsValidFieldName ( RadFilterExpressionConverter.cs:180 ) allows only letters, digits, _ and . . Any other FieldName is silently replaced with null during LoadSettings() . SaveSettings() does not validate, so a bracket-qualified name saves but can't be loaded.
Steps to reproduce
1. Create a RadFilter with a RadFilterTextFieldEditor where FieldName = "[dataBooking].[TotalPaid]" .
2. Add a RadFilterLessThanFilterExpression<string> on that field with the value "1000" .
3. Call SaveSettings() . The JSON contains "FieldName":"[dataBooking].[TotalPaid]" .
4. On a new RadFilter with the same editor, call LoadSettings(saved) .
Sample console application code snippet to reproduce the issue:
using System;
using System.Collections;
using Telerik.Web.UI;
namespace RadFilterBracketFieldNameRepro
{
class Program
{
private const string BracketedFieldName = "[dataBooking].[TotalPaid]";
static void Main()
{
Console.WriteLine("Telerik.Web.UI version: " + typeof(RadFilter).Assembly.GetName().Version);
Console.WriteLine("FieldName under test: " + BracketedFieldName);
Console.WriteLine();
// 1) Build a filter with one expression against a bracket-qualified field name.
// This format is not unusual -- it's what you get for any field name that needs
// to be schema/table-qualified. Telerik's own RadFilterSqlExpressionEvaluator
// produces the same "[table].[column]" shape when generating SQL.
RadFilter source = new RadFilter();
source.FieldEditors.Add(new RadFilterTextFieldEditor { FieldName = BracketedFieldName });
RadFilterLessThanFilterExpression<string> expression = new RadFilterLessThanFilterExpression<string>(BracketedFieldName);
((IRadFilterValueExpression)expression).SetValues(new ArrayList { "1000" });
source.RootGroup.AddExpression(expression);
// 2) Persist it the normal way.
string savedState = source.SaveSettings();
Console.WriteLine("SaveSettings() output (base64):");
Console.WriteLine(savedState);
Console.WriteLine();
Console.WriteLine("Decoded JSON:");
Console.WriteLine(System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(savedState)));
Console.WriteLine();
// 3) Simulate the next request restoring that saved state into a fresh RadFilter,
// exactly like a report/page reload would.
RadFilter restored = new RadFilter();
restored.FieldEditors.Add(new RadFilterTextFieldEditor { FieldName = BracketedFieldName });
try
{
restored.LoadSettings(savedState);
RadFilterLessThanFilterExpression<string> restoredExpression = (RadFilterLessThanFilterExpression<string>)restored.RootGroup.Expressions[0];
Console.WriteLine("FieldName after LoadSettings(): '" + restoredExpression.FieldName + "'");
Console.WriteLine(restoredExpression.FieldName == BracketedFieldName
? "OK -- FieldName round-tripped correctly."
: "BUG REPRODUCED -- FieldName was lost during LoadSettings().");
}
catch (Exception ex)
{
Console.WriteLine("BUG REPRODUCED -- LoadSettings() threw:");
Console.WriteLine(ex);
}
Console.WriteLine();
Console.WriteLine("Press Enter to exit...");
Console.ReadLine();
}
}
}
Expected: The expression is restored with its original FieldName.
Actual:
System.ArgumentException: Parameter cannot be null or empty. Parameter name: fieldName RadFilterDataFieldEditorCollection.FindEditorForFieldName RadFilterSingleExpressionItem.SetupFunctionInterface RadFilter.CreateFilterItems / CreateChildControls RadFilter.RecreateControl RadFilter.LoadSettings
The current page FileList items are not properly updated when the paging is enabled. Returning to a previously paged folder is properly restored to page 1, but it keeps showing the content of lastly listed page. The issue is reproducible in all explorer modes of the control. Video - http://screencast.com/t/KVpgADxanuh
1. Click the ComboBox
2. Select an item in its dropdown
3. Expected: no exception on selection, actual: A "Selection out of range" exception is thrown.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
public partial class ComboBoxNavigation : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
private DataTable CreateTestTable()
{
DataTable table = new DataTable();
table.Columns.Add("Text");
table.Columns.Add("Value");
table.Columns.Add("test");
table.Rows.Add("Item1", "1", "aaa");
table.Rows.Add("Item1", "1", "aaa");
table.Rows.Add("Item1", "1", "aaa");
return table;
}
protected void rcbStaff_ItemsRequested(object sender, RadComboBoxItemsRequestedEventArgs e)
{
RadComboBox rcbUser = sender as RadComboBox;
rcbUser.DataSource = CreateTestTable();
rcbUser.DataTextField = "Text";
rcbUser.DataValueField = "Value";
rcbUser.DataBind();
}
protected void rcbStaff_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
}
} <telerik:RadNavigation ID="RadNavigation1" runat="server">
<Nodes>
<telerik:NavigationNode Text="Home" />
<telerik:NavigationNode Text="Candidate" />
<telerik:NavigationNode Text="Preliminary Candidate" />
<telerik:NavigationNode Text="StaffSearch" CssClass="staffSearchWrapper rootTemplate">
<NodeTemplate>
<telerik:RadComboBox ID="rcbStaff"
AutoPostBack="true"
runat="server"
EnableLoadOnDemand="True"
OnItemsRequested="rcbStaff_ItemsRequested"
OnSelectedIndexChanged="rcbStaff_SelectedIndexChanged"
>
</telerik:RadComboBox>
</NodeTemplate>
</telerik:NavigationNode>
</Nodes>
</telerik:RadNavigation>There are missing methods in the TypeScript definitions provided. You can find attached a file that illustrates what needs to be updated.
A workaround is to remove the loading sign functionality by placing the following script at the end of the form tag The second override is necessary only if you use the OnClientDataLoaded event to alter the data and add fields in the data object that do not exist in the server response. You need to rename the OnClientDataLoaded method call to use your actual method name. You can find an example of both workarounds and their usage attached. Some additional information: - If possible, move the tiles out of the AJAX request, as this will eliminate all of the problems. Depending on the actual scenario perhaps you can make sure they are not in an update panel (e.g., position them absolutely on the page while keeping their markup out of the partial postback). - consider moving any data formatting logic from the event handler to the template. You can define functions that format the code in the template, not only in the event. An example is available in the attached file. Alternatively, you can return the data formatted from the web service. - consider reducing the time interval for the requests, because after the AJAX request, only 1 of 2 requests will update the tile UI.
In lightweight the issue is not observed:
<telerik:RadRibbonBar runat="server" RenderMode="Classic">
<Tabs>
<telerik:RibbonBarTab Text="home">
<%-- duplicate the group and items inside to replicate more easily --%>
<telerik:RibbonBarGroup Text="Documents">
<Items>
<telerik:RibbonBarButton Text="Item 1" />
</Items>
</telerik:RibbonBarGroup>
</telerik:RibbonBarTab>
</Tabs>
</telerik:RadRibbonBar>
The Delete and Backspace buttons remain enabled in spell check mode, allowing the client to delete selections inside the Editor's content area. Steps to reproduce: 1. Open http://demos.telerik.com/aspnet-ajax/editor/examples/spellchecker/defaultcs.aspx 2. Click the Spell check icon 3. Select several words from the content and press Backspace/Delete Result: The selected content is deleted Expected: The Delete/Backspace button press is ignored