【发布时间】:2014-02-26 17:43:35
【问题描述】:
这里的主要问题是使用 InCell 编辑设置验证 Kendo Grid。
Kendo UI 网格不过是一个“美化表格”——它最终是一个 Html 表格,因此我将 JQuery 和 JavaScript 标记到这个问题中!
这是网格:
@(Html.Kendo().Grid<Timeshet.Web.Models.UserModel>()
.Name("Grid")
.Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation("This user will now be removed from the grid. \n\n To commit this delete make sure you click Save Changes button !"))
.Sortable(sortable => sortable.AllowUnsort(false))
.ToolBar(toolbar =>
{
toolbar.Create();
toolbar.Save();
})
.Columns(columns =>
{
//columns.Bound(p => p.UserId);
columns.Bound(p => p.Forename);
columns.Bound(p => p.Surname);
columns.Bound(p => p.Email);
columns.Bound(p => p.Txtname);
columns.Bound(p => p.Mobile);
columns.Bound(p => p.HolidayEntitlement);
columns.Bound(p => p.Password);
columns.Bound(p => p.Level);
columns.Bound(p => p.Active).ClientTemplate("<input type='checkbox' class='chkboxActive' #= Active ? checked='checked' : '' # ></input>");
columns.Bound(p => p.UserAccess);
columns.Command(command => command.Destroy()).Width(100).Visible(User.IsInRole(Constants.Admin)).Hidden();
})
// .Events(events => events.SaveChanges("validateInputOnSaveChanges"))
.DataSource(dataSource => dataSource.Ajax()
.Model(model => model.Id(p => p.UserId))
.Batch(true)
//.Events(events=>events.Change("validateInputOnSaveChanges"))
.Events(events => events.Error("error"))
// .Events(events => events.RequestStart("requestStart"))
.Events(events => events.RequestEnd("onRequestEnd"))
.Create(update => update.Action("UserCreate", "User"))
.Read(read => read.Action("UserRead", "User").Data("ExtraData"))
.Update(update => update.Action("UserUpdate", "User"))
.Destroy(update => update.Action("UserDelete", "User"))
)
)
如您所见,它具有 inCell 编辑模式,其验证被证明是困难的。
我试图解析网格并寻找在这样的编辑单元格上启用的 k-dirty-class。我在网格的 saveChanges 事件上执行此操作,单击保存更改按钮时会触发该事件:
$("#Grid tbody").find('td').each(
function () {
debugger;
// run for specific columns - where validation is needed
// var isDirty = cellToValidate.hasClass('k-dirty-cell');
var isDirty = $(this).hasClass('k-dirty-cell');
if (isDirty == true) {
var cellContent = $(this).context.innerText;
var cellIndex = $(this).context.cellIndex;
alert(cellContent + cellIndex);
}
});
我要解决的问题是,当用户创建新用户(行)并输入名字和姓氏并保存时 - 网格不会验证 TxtName 列,因为它设置为 InCell 编辑模式,其中只有单击的单元格会根据视图模型进行验证。
这必须在 InCell 编辑模式下完成。内联编辑有效,但这不是这里的要求。
我的计划是验证脏单元格上的输入,但这也很困难,因为并非所有脏单元格都需要验证,只有 TextName 列!
我想知道我是否可以捕获发送到控制器的新行的详细信息,这基本上是视图模型?
非常感谢。
【问题讨论】:
标签: javascript jquery kendo-ui kendo-grid kendo-asp.net-mvc