Features
- Overview
- Collapsible Column Headers
- Styling Records, Groups, and Cells
- Grouping
- Filtering
- Row and Column Freezing
- Paging
- Group Panel
- Remote Data Binding
- Custom Cells
- Custom Editors
- Editing
- Batch Editing
- Sorting
- Virtual Scrolling
- Disable Server Reading
- Data Map
- Excel Export
- PDF Export
- Unobtrusive Validation
Unobtrusive Validation
Unobtrusive Validation
Features
Description
This sample shows how to use unobtrusive validation in the MultiRow control.
The columns have the following validations:
- Name: Required. Alphanumeric and contains 4 to 10 characters.
- Industry: Required.
- Country: Required.
- Phone: Required. 8 to 11 characters.
- Email: Required. Valid e-mail address.
- Birthdate: Required.
using C1.Web.Mvc; using C1.Web.Mvc.Serialization; using MultiRowExplorer.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; namespace MultiRowExplorer.Controllers { public partial class MultiRowController : Controller { private static List<UserInfo> users = UsersData.Users; public ActionResult UnobtrusiveValidation() { return View(users); } public ActionResult MultiRowUpdateUserInfo([C1JsonRequest]CollectionViewEditRequest<UserInfo> requestData) { return this.C1Json(CollectionViewHelper.Edit<UserInfo>(requestData, item => { string error = string.Empty; bool success = true; try { var resultItem = users.Find(u => u.Id == item.Id); var index = users.IndexOf(resultItem); users.Remove(resultItem); users.Insert(index, item); } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<UserInfo> { Error = error, Success = success, Data = item }; }, () => users)); } public ActionResult MultiRowCreateUserInfo([C1JsonRequest]CollectionViewEditRequest<UserInfo> requestData) { return this.C1Json(CollectionViewHelper.Edit<UserInfo>(requestData, item => { string error = string.Empty; bool success = true; try { users.Add(item); item.Id = users.Max(u => u.Id) + 1; } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<UserInfo> { Error = error, Success = success, Data = item }; }, () => users)); } public ActionResult MultiRowDeleteUserInfo([C1JsonRequest]CollectionViewEditRequest<UserInfo> requestData) { return this.C1Json(CollectionViewHelper.Edit<UserInfo>(requestData, item => { string error = string.Empty; bool success = true; try { var resultItem = users.Find(u => u.Id == item.Id); users.Remove(resultItem); } catch (Exception e) { error = e.Message; success = false; } return new CollectionViewItemResult<UserInfo> { Error = error, Success = success, Data = item }; }, () => users)); } } }
@model List<UserInfo> @section Scripts{ @Scripts.Render("~/jquery") @Scripts.Render("~/jqueryval") } @(Html.C1().MultiRow<UserInfo>() .Id("uvMultiRow") .LayoutDefinition(ld => { ld.Add().Colspan(1).Cells(cells => { cells.Add(c => c.Binding("Id").IsReadOnly(true)); }); ld.Add().Colspan(1).Cells(cells => { cells.Add(c => c.Binding("Name")) .Add(c => c.Binding("Industry")); }); ld.Add().Colspan(3).Cells(cells => { cells.Add(c => c.Binding("Country")) .Add(c => c.Binding("Phone").Colspan(2)) .Add(c => c.Binding("Email").Colspan(2)) .Add(c => c.Binding("Birthdate").Format("M/d/yyyy")); }); }) .Bind(ib => ib.Bind(Model) .Update(Url.Action("MultiRowUpdateUserInfo")) .Create(Url.Action("MultiRowCreateUserInfo")) .Delete(Url.Action("MultiRowDeleteUserInfo")) ) .AllowAddNew(true) .AllowDelete(true) .CssClass("multirow") ) @section Description{ <p> This sample shows how to use unobtrusive validation in the MultiRow control. </p> <p> The columns have the following validations: <ul> <li><b>Name:</b> Required. Alphanumeric and contains 4 to 10 characters.</li> <li><b>Industry:</b> Required.</li> <li><b>Country:</b> Required.</li> <li><b>Phone:</b> Required. 8 to 11 characters.</li> <li><b>Email:</b> Required. Valid e-mail address.</li> <li><b>Birthdate:</b> Required.</li> </ul> </p> }
using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Drawing; namespace MultiRowExplorer.Models { public class UserInfo { public int Id { get; set; } [Required] [RegularExpression(pattern: "^[a-zA-Z0-9]{4,10}$", ErrorMessage = "The username must be alphanumeric and contains 4 to 10 characters.")] public string Name { get; set; } [Required] [RegularExpression(pattern: @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "The Email field is not a valid e-mail address.")] public string Email { get; set; } [Required] [StringLength(16, MinimumLength = 6)] public string Password { get; set; } [Required] [Compare("Password")] public string ConfirmPassword { get; set; } [Required] [StringLength(11, MinimumLength = 8)] public string Phone { get; set; } [Required] public string Country { get; set; } [Required] public string Industry { get; set; } [Required] public DateTime Birthdate { get; set; } [Required] public Color? FavoriteColor { get; set; } [Required] public string[] Skills { get; set; } } }