Your search did not match any results.
Form

Validation

Documentation
This demo shows how to validate the Form editors. Validation rules are specified for each form item using the validationRules option. All editors on the form are combined into a validation group defined by the form’s validationGroup option.
Note that the «Register» button here does not implement a usual onClick event handler. Instead, it has the useSubmitBehavior option set to true. This setting tells the button to validate and submit the HTML form in which it is nested, with no further configuration required.
@using(Html.BeginForm()) { using(Html.DevExtreme().ValidationGroup()) { @Html.AntiForgeryToken() @(Html.DevExtreme().Form() .ShowValidationSummary(true) .Items(items => { items.AddGroup() .Caption("Credentials") .Items(groupItems => { groupItems.AddSimple() .DataField("Login"); groupItems.AddSimple() .DataField("Password") .Editor(e => e.TextBox().Mode(TextBoxMode.Password)); groupItems.AddSimple() .DataField("ConfirmPassword") .Editor(e => e.TextBox().Mode(TextBoxMode.Password)); }); items.AddGroup() .Caption("Personal Data") .Items(groupItems => { groupItems.AddSimple() .DataField("Name"); groupItems.AddSimple() .DataField("Date") .Editor(e => e.DateBox()) .Label(l => l.Text("Date of birth")); }); items.AddGroup() .Caption("Billing address") .Items(groupItems => { groupItems.AddSimple() .DataField("Country") .Editor(e => e .SelectBox() .DataSource(d => d.WebApi().Controller("GeoNames").LoadAction("Countries")) ); groupItems.AddSimple() .DataField("City") .Editor(e => e .Autocomplete() .MinSearchLength(2) .DataSource(d => d.WebApi().Controller("GeoNames").LoadAction("Cities")) ); groupItems.AddSimple() .DataField("Address"); groupItems.AddSimple() .DataField("Phone") .HelpText("Enter the phone number in USA phone format") .Editor(e => e.TextBox() .Mask("+1 (X00) 000-0000") .MaskRules(new { X = new JS("/[02-9]/") }) .MaskInvalidMessage("The phone must have a correct USA phone format") .UseMaskedValue(true) ); }); items.AddSimple() .DataField("Accepted") .Label(l => l.Visible(false)) .Editor(editor => editor.CheckBox().Text("I agree to the Terms and Conditions")); }) .FormData(Model) ) <br /> @(Html.DevExtreme().Button() .Text("Register") .Type(ButtonType.Success) .UseSubmitBehavior(true) ) } } <script> function verifyAge(options) { return options.value && new Date(Date.now()).getFullYear() - options.value.getFullYear() >= 21; } </script>
<p>The submitted data has been successfully accepted.</p> <br /> @(Html.DevExtreme().Button() .Text("Reload demo") .Type(ButtonType.Default) .Icon("refresh") .OnClick(@<text> function() { window.location = window.location; } </text>) )
using DevExtreme.AspNet.Data; using DevExtreme.AspNet.Mvc; using DevExtreme.NETCore.Demos.Models; using DevExtreme.NETCore.Demos.Models.DataGrid; using DevExtreme.NETCore.Demos.Models.SampleData; using DevExtreme.NETCore.Demos.ViewModels; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System; using System.Linq; namespace DevExtreme.NETCore.Demos.Controllers { public class FormController : Controller { [HttpGet] public ActionResult Validation() { return View(new EditorsViewModel() { Name = "Peter" }); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Validation(EditorsViewModel userInfo) { if(ModelState.IsValid) { return View("SuccessValidation"); } return View(userInfo); } } }
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; namespace DevExtreme.NETCore.Demos.ViewModels { public class AgeVerificationAttribute : ValidationAttribute, IClientModelValidator { public void AddValidation(ClientModelValidationContext context) { MergeAttribute(context.Attributes, "data-val-custom-verifyage", FormatErrorMessage(context.ModelMetadata.GetDisplayName())); MergeAttribute(context.Attributes, "data-val-custom-verifyage-validationcallback", "verifyAge"); } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { DateTime? date = (DateTime?)value; if(date <= DateTime.Now.AddYears(-21)) { return ValidationResult.Success; } return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); } bool MergeAttribute(IDictionary<string, string> attributes, string key, string value) { if(attributes.ContainsKey(key)) { return false; } attributes.Add(key, value); return true; } } }
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; namespace DevExtreme.NETCore.Demos.ViewModels { public class EditorsViewModel { [Required(ErrorMessage = "Login is required")] public string Login { get; set; } [Required(ErrorMessage = "Name is required")] [RegularExpression(@"^[^0-9]+$", ErrorMessage = "Do not use digits in the Name.")] [StringLength(int.MaxValue, MinimumLength = 2, ErrorMessage = "Name must have at least 2 symbols")] public string Name { get; set; } [Required(ErrorMessage = "Password is required")] public string Password { get; set; } [Required(ErrorMessage = "Confirm Password is required")] [System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "'Password' and 'Confirm Password' do not match.")] public string ConfirmPassword { get; set; } [RegularExpression(@"^\+\s*1\s*\(\s*[02-9]\d{2}\)\s*\d{3}\s*-\s*\d{4}$", ErrorMessage = "The phone must have a correct USA phone format")] public string Phone { get; set; } public string Extension { get; set; } [Required(ErrorMessage = "Country is required")] public string Country { get; set; } [Required(ErrorMessage = "Address is required")] public string Address { get; set; } public string Description { get; set; } public int Age { get; set; } public string Drink { get; set; } [Required(ErrorMessage = "City is required")] [RegularExpression("^[^0-9]+$", ErrorMessage = "Do not use digits in the City name.")] [StringLength(int.MaxValue, MinimumLength = 2, ErrorMessage = "City must have at least 2 symbols")] public string City { get; set; } public IEnumerable<string> Colors { get; set; } public IEnumerable<string> SelectedColors { get; set; } public string Color { get; set; } [Required(ErrorMessage = "Date of birth is required")] [AgeVerification(ErrorMessage = "You must be at least 21 years old")] public DateTime? Date { get; set; } [Required(ErrorMessage = "You must agree to the Terms and Conditions")] public bool Accepted { get; set; } } }
form { margin: 10px; }