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; }
}
}