Bug report
Remote Validator Not Blocking Form Submission
Reproduction of the problem
Project attached
Expected/desired behavior
Form submission shall trigger after the validation has completed
Environment
Kendo UI version: [all]
Browser: [all]
Link do not appear properly in a TagHelper menu that uses asp-action and asp-controller. In version 2.1 the application crashes
<menu-item text="Furniture">
<sub-items>
<menu-item text="Tables & Chairs" asp-action="About" asp-controller="Home" ></menu-item>
</sub-items>
</menu-item>
Microsoft Tag Helpers should create a working anchor tag
The TextBox TagHelper does not render the maxlength and placeholder attributes when set via data annotations.
For a model property defined the following way
[Display(Name = "Example", Prompt = "Example Prompt")]
[StringLength(maximumLength : 5, MinimumLength = 1, ErrorMessage = "Must be between 1 and 5")]
public string Example { get ; set ; }
the TextBox TagHelper generetes
<input
class="form-control k-input-inner"
data-val="true"
data-val-length="Must be between 1 and 5"
data-val-length-max="5"
data-val-length-min="1"
id="Example"
name="Example"
value=""
data-role="textbox"
style="width: 100%;"
aria-disabled="false"
autocomplete="off"
aria-invalid="true"
aria-describedby="Example_validationMessage">
when the default ASP.NET Core TagHelper generates markup containing the maxlength and placeholder attributes:
<input
class="form-control k-invalid"
type="text"
data-val="true"
data-val-length="Must be between 1 and 5"
data-val-length-max="5"
data-val-length-min="1"
id="Example"
maxlength="5"
name="Example"
placeholder="Example Prompt"
value=""
aria-invalid="true"
aria-describedby="Example_validationMessage">
The maxlength and placeholder attributes are set to the generated input element.
When using the TaxtBoxFor HTML helper and the MaxLength is set via DataAnnotation the maxlength
attribute is not rendered.
Model:
public class MyModel
{
[MaxLength(5)]
public string Text { get; set; }
}
View:
@Html.Kendo().TextBoxFor(m => m.Text)
The Telerik UI for ASP.NET Core HTML Helper renders the following markup, without the maxlength
attribute:
<span class="k-widget k-textbox" style="">
<input data-val="true" data-val-maxlength="The field Text must be a string or array type with a maximum length of '5'." data-val-maxlength-max="5" id="Text" name="Text" value="" data-role="textbox" aria-disabled="false" class="k-input" autocomplete="off" style="width: 100%;">
</span>
The default Html.TextBoxFor helper renders the following markup, containing the maxlength
attribute:
<input data-val="true" data-val-maxlength="The field Text must be a string or array type with a maximum length of '5'." data-val-maxlength-max="5" id="Text" maxlength="5" name="Text" type="text" value="">
The Telerik UI for ASP.NET Core HTML Helper should render the maxlength
attribute.
Feature Request
Create TexBox label from ViewModel Data Annotation
Currently, this is possible using the default @Html.Label, and @Html.Textbox
-Model:
[DisplayName("First Name :")]
public string FirstName { get; set; }
-View
<tr> <td> @ Html.LabelFor(m=>m.FirstName) </td> <td> @Html.TextBoxFor(m=>m.FirstName) </td> </tr>
Data Model
[Required]
[StringLength(128)]
[DisplayName("Password")]
[DataType(DataType.Password)]
public string UserPassword { get; set; }
<div class="form-group">
<kendo-textbox name="UserPassword" type="password"> <!-HOW to use DataType Annotation here? -- >
<textbox-label content="@Html.DisplayNameFor(m=>m.UserPassword)" floating="true" />
</kendo-textbox>
</div>
The solution below can be used as a workaround for the time being:
@{ Dictionary<string, string> fieldTypes = new Dictionary<string, string>();
var properties = typeof(TestModel).GetProperties();
foreach (var property in properties)
{
var dataTypeAttributes = property.GetCustomAttributes(
typeof(System.ComponentModel.DataAnnotations.DataTypeAttribute), false);
if (dataTypeAttributes.Length > 0)
{
var attribute = dataTypeAttributes[0] as
System.ComponentModel.DataAnnotations.DataTypeAttribute;
var dataType = (System.ComponentModel.DataAnnotations.DataType)attribute.DataType;
fieldTypes[property.Name] = dataType.ToString().ToLowerInvariant();
}
else
{
fieldTypes[property.Name] = null;
}
} }
<form id="mainForm" kendo-validator="true">
<kendo-textbox for="UserPassword" type="@fieldTypes["UserPassword"]">
<textbox-label content="@Html.DisplayNameFor(m=>m.UserPassword)" floating="true" />
</kendo-textbox>
</form>
<script>
$(document).ready(function () {
var validator = $("#mainForm").data("kendoValidator");
});
</script