I am using the Grid with two editor template bound to viewdata to populate the components.
Now this is code that I wrote in 2017 that I recent upgraded to .NET 7 ASP Core and has work all those years with no issue. So I think this may be a regression in the grid code.
I have embedded the relevant code leaving out the grid views custom javascript since it isn't relevant.
The behavior that I am seen is that the the grids model properties that do NOT use a customer editor template are not being bound when the save event fires.
public class AlertRuleGridViewModel
{
public int Id { get; set; }
[UIHint("ComponentEditor")]
public string? Component { get; set; }
[UIHint("EmailAddress")]
public string? Email { get; set; }
[UIHint("TypeEditor")]
public string? Type { get; set; }
[UIHint("Boolean")]
public bool Enabled { get; set; }
}
<div class="container alert-rules-grid">
@(Html.Kendo().Grid<AlertRuleGridViewModel>()
.Name("alert-grid")
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(l => l.Id);
model.Field(field => field.Id).Editable(false);
model.Field(field => field.Type).DefaultValue(ViewData["defaultType"] as String);
})
.PageSize(12)
.Sort(a => a.Add("Id").Descending())
.Read(read => read.Action("GetRules", "Alerts").Data("additionalData"))
.Create(update => update.Action("UpdateRule", "Alerts"))
.Update(update => update.Action("UpdateRule", "Alerts"))
.Destroy(destroy => destroy.Action("DeleteRule", "Alerts"))
.Events(e => e.Error("gridErrorHandler"))
)
.Columns(columns =>
{
columns.Bound(b => b.Id).Title("Id").Visible(true).Width("4%");
columns.Bound(b => b.Component).Title("Component").EditorTemplateName("ComponentEditor").Visible(true);
columns.Bound(b => b.Email).Title("Email").Visible(true);
columns.Bound(b => b.Type).Title("Log Type").EditorTemplateName("TypeEditor").Visible(true);
columns.Bound(b => b.Enabled).Title("Enabled").ClientTemplate("#=renderStatus(data)#").Visible(true);
columns.Command(command =>
{
command.Edit();
command.Destroy();
});
}
)
.ToolBar(toolBar =>
{
toolBar.ClientTemplateId("toolBarTemplate");
})
.Events(events =>
{
events.Cancel("onCancelEdit");
events.Save("onSave");
}
)
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Pageable() // Enable paging
.Sortable() // Enable sorting
.Scrollable(s => s.Height("auto"))
.Resizable(resize => resize.Columns(true))
)
</div>
I suspect the issue is the generated html for the input that used the editor template.
The data-bind attribute is set to "value:Component.Component" which should be "value:Component"<td class="k-table-td" role="gridcell" data-container-for="Component">
<span class="k-input k-combobox k-combobox-clearable k-input-solid k-input-md k-rounded-md k-valid" style="">
<input name="Component.Component_input" class="k-input-inner k-valid" type="text" autocomplete="off" title="" role="combobox" aria-expanded="false" style="" tabindex="0" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-autocomplete="none" aria-controls="Component_Component_listbox" data-bind="value:Component.Component_input">
<span unselectable="on" class="k-clear-value k-hidden" title="clear" role="button" tabindex="-1">
<span class="k-svg-icon k-svg-i-x" aria-hidden="true">
<svg viewBox="0 0 512 512" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M416 141.3 301.3 256 416 370.7 370.7 416 256 301.3 141.3 416 96 370.7 210.7 256 96 141.3 141.3 96 256 210.7 370.7 96l45.3 45.3z"/>
</svg>
</span>
</span>
<button type="button" class="k-input-button k-button k-button-md k-button-solid k-button-solid-base k-icon-button" aria-label="expand combobox" role="button" tabindex="-1">
<span class="k-svg-icon k-svg-i-caret-alt-down k-button-icon" aria-hidden="true">
<svg viewBox="0 0 512 512" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M256 352 128 160h256L256 352z"/>
</svg>
</span>
</button>
<input id="Component_Component" name="Component.Component" type="text" value="" data-role="combobox" aria-disabled="false" aria-readonly="false" style="display: none;" data-bind="value:Component.Component"/>
<script>kendo.syncReady(function(){jQuery("#Component_Component").kendoComboBox({"dataTextField":"Name","dataValueField":"Value","valuePrimitive":true,"dataSource":[{"Name":"AppLog.Common.Test","Value":"AppLog.Common.Test"},{"Name":"AppLog.WebAPI","Value":"AppLog.WebAPI"},{"Name":"BadgeReader","Value":"BadgeReader"},{"Name":"CCS.WebUI","Value":"CCS.WebUI"},{"Name":"LVCVA.AppLog.Internal.Web","Value":"LVCVA.AppLog.Internal.Web"},{"Name":"LVCVA.AppSecurity.Domain","Value":"LVCVA.AppSecurity.Domain"},{"Name":"Registration.WPF.UI","Value":"Registration.WPF.UI"},{"Name":"spLogApplicationMessage","Value":"spLogApplicationMessage"}]});});</script>
<span class="field-validation-valid" data-valmsg-for="Component" data-valmsg-replace="true"/>
</td>
<td class="k-table-td" role="gridcell" data-container-for="Type">
<span title="" class="k-picker k-dropdownlist k-picker-solid k-picker-md k-rounded-md k-valid" unselectable="on" role="combobox" aria-expanded="false" tabindex="0" aria-controls="Type_Type_listbox" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-describedby="e73b8727-5e28-4d9b-9faa-df8239f54aa5" style="">
<span id="e73b8727-5e28-4d9b-9faa-df8239f54aa5" unselectable="on" class="k-input-inner">
<span class="k-input-value-text"/>
</span>
<span role="button" class="k-input-button k-button k-button-md k-button-solid k-button-solid-base k-icon-button" aria-label="select" type="button">
<span class="k-svg-icon k-svg-i-caret-alt-down k-button-icon" aria-hidden="true">
<svg viewBox="0 0 512 512" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M256 352 128 160h256L256 352z"/>
</svg>
</span>
</span>
<input id="Type_Type" name="Type.Type" type="text" value="" data-role="dropdownlist" style="display: none;" data-bind="value:Type.Type"/>
<script>kendo.syncReady(function(){jQuery("#Type_Type").kendoDropDownList({"dataTextField":"Type","dataValueField":"Value","valuePrimitive":true,"dataSource":[{"Type":"Critical","Value":"Critical"},{"Type":"Error","Value":"Error"},{"Type":"Warning","Value":"Warning"},{"Type":"Information","Value":"Information"},{"Type":"Verbose","Value":"Verbose"},{"Type":"Start","Value":"Start"},{"Type":"Stop","Value":"Stop"},{"Type":"Suspend","Value":"Suspend"},{"Type":"Resume","Value":"Resume"}]});});</script>
<span class="field-validation-valid" data-valmsg-for="Type" data-valmsg-replace="true"/>
</td>
As per the subject, if you use jQuery to get a Kendo TabStrip in a ComboBox change event it inserts this div into the TabStrip control:
<div class="k-tabstrip-items-wrapper k-hstack">
<ul class="k-tabstrip-items k-reset" role="tablist"></ul>
</div>
This used to work as we were changing the selected tab in a TabStrip based on a ComboBox selection, but this no longer works. Please see the following REPL where a new div is added every time you change the ComboBox value:
https://netcorerepl.telerik.com/mxETafaT24zWOe0C50
Kind regards,
David
If I put the Grid into a kendo-template for the TileLayout control, the ClientTemplate does not work properly. It only gets called once regardless of the number of items in the grid and the data is not being passed in.
This is my column definition:
columns.Bound(c => c.DocumentKey).Title(" ").ClientTemplate("#=CommandTemplate(data)#").Width(70);
And I am calling the .ToClientTemplate() on the Grid. Everything else work great except for this one issue.
I have not been able to find any other info, so what am I missing?
The StringExtensions -> ToCamelCase method(part of Kendo.Mvc.Extenstions) doesn't return the expected Camel case result.
Include the Kendo.Mvc.Extenstions namespace. Define the following in a controller:
public IActionResult Index()
{
string test = "RANDOMStatusId";
test = test.ToCamelCase();
return View();
}
Set a debugger and see the value of the "test" variable.
The returned from the ToCamelCase() method value is "rANDOMStatusId"
The expected result returned from the ToCamelCase() method value is "randomStatusId"
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:
Request:
Please can Telerik create functionality along the lines of:
$("#SomeGrid").data("kendoGrid").setOptions($("#SomeGrid").data("kendoGrid").mergeOptions(OptionsSaved, OptionsNew));
KR
David
### Bug report
The CheckBox TagHelper does not render the attribute "required" and a custom class.
### Reproduction of the problem
The CheckBox TagHelper definition:
<kendo-checkbox id="KendoCheckboxRequiredByHtml" class="form-check-input" required>
</kendo-checkbox>
It generates the following markup:
<input id="KendoCheckboxRequiredByHtml" name="KendoCheckboxRequiredByHtml" type="checkbox" value="true" data-role="checkbox" class="k-checkbox k-checkbox-md k-rounded-md">
<input name="KendoCheckboxRequiredByHtml" type="hidden" value="false">
A sample for reproduction is attached.
### Expected/desired behavior
The attribute "required" and the class "form-check-input" to be set to the generated input element.
### Environment
* **Kendo UI version: 2022.2.510
* **Browser: [all]
On mobile device's the TimePicker and DateTimePicker's popup doesn't get scrolled as expected. Instead the entire page is scrolled.
The page gets scrolled.
The popup should be scrollable.
1570836
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".
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:
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.
Steps to reproduce
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>
### Bug report
The Button TagHelper is missing in the Visual Studio 2022 IntelliSense.
### Reproduction of the problem
Create a Telerik UI for ASP.NET Core application (.NET 6) and try to insert a Button TagHelper by using the IntelliSense. It appears that not all available Telerik UI components are available in the suggested list.
### Environment
* **Visual Studio Professional 2022 version: 17.1.0 Preview 1.1
* **Kendo UI version: 2021.3.1109
* **jQuery version: 1.12.4
* **Browser: [all]
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!
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.
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.