Kendo ui 禁用Telerick MVC网格上的编辑
我有一个MVC剑道UI网格,如下所示Kendo ui 禁用Telerick MVC网格上的编辑,kendo-ui,telerik,kendo-grid,kendo-asp.net-mvc,Kendo Ui,Telerik,Kendo Grid,Kendo Asp.net Mvc,我有一个MVC剑道UI网格,如下所示 @(Html.Kendo().Grid<SomeViewModel>() .Name("someGrid") .ToolBar(toolbar => { toolbar.Create().Text("Add Entry"); toolbar.Save(); }
@(Html.Kendo().Grid<SomeViewModel>()
.Name("someGrid")
.ToolBar(toolbar =>
{
toolbar.Create().Text("Add Entry");
toolbar.Save();
})
.Columns(columns =>
{
columns.Bound(p => p.Name).ClientTemplate(@"<input type='radio' name='SomeradioName'> #= Name # </input>");
columns.Bound(p => p.DateCreated).Format("{0:dddd dd MMMM yyyy}");
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Events(e => e.DataBound("onDataBound"))
.Events(e => e.Edit("onDataEdit"))
.Selectable(selectable => selectable.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row))
.Scrollable()
.Filterable()
.HtmlAttributes(new {style = "height:200px;"})
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Batch(false)
.Events(events => events.Error("onError"))
.Model(model =>
{
model.Id(s => s.Id);
model.Field(s => s.Name).Editable(true);
model.Field(s => s.DateCreated).Editable(false);
})
.Read(read => read.Action(...))
.Create(create => create.Action(...))
.Update(create => create.Action(...))))
这也可以,但在单击单选按钮时不再触发更改事件,直到单击Cancel
changes命令
方法#3
似乎还有另一种方法可以做到这一点,即禁用此链接中给出的enable:
在我的情况下,我如何做类似的事情?无法获取数据
解析
还有别的办法吗
更新
方法#4
e.container.find("input[name=Name]").each(function () { $(this).attr("disabled", "disabled") });
var grid = this;
grid.cancelChanges();
这不会中断更改事件。然而,经验并不是那么好。如果添加新记录,如果用户按下任何其他行,更改将被取消。他们必须添加新记录,或者点击保存,或者点击除网格行以外的任何位置,您可以使用方法3在编辑时将列设置为只读
function edit(e) {
if (e.model.isNew() == false) {
$('[name="Name"]').attr("readonly", true);
}
}
另外,您的模板没有id=Name
,因此我怀疑下面的内容是否适合您。改为按上面的name
属性查找
$("#Name").attr("readonly", true);
您可以使用方法3在编辑时将列设置为只读
function edit(e) {
if (e.model.isNew() == false) {
$('[name="Name"]').attr("readonly", true);
}
}
另外,您的模板没有id=Name
,因此我怀疑下面的内容是否适合您。改为按上面的name
属性查找
$("#Name").attr("readonly", true);
我选择了我更新的方法4。如果有人有更好的想法,欢迎分享。我选择了我更新的方法4。如果有任何人有更好的想法,请随意分享。我刚从Chrome浏览器中查看了一下,看起来它确实解决了编辑问题(在IE中,您仍然可以在开头添加文本,这是一个bug)。但是,此解决方案不再引发更改事件。如果单击“取消”命令,则“更改”事件将再次开始工作。因此,这是一个黑客,在我看来不是一个干净的解决方案。好吧,在这种情况下,我认为一种方法是使网格不可编辑,并在网格外添加一个按钮以添加新记录。单击弹出一个窗口,在使用ajax或其他东西提交到数据源/数据库时添加一条新记录,并重新绑定网格。是的,但是因为他们的网格已经带有验证、ajax调用等功能。简单地使用它更容易。我更新了方法#4,这是我计划采用的方法,除非有人有更好的解决方案。我刚从Chrome浏览器中检查,看起来它确实解决了编辑问题(从IE中,你仍然可以在开始添加文本,这是一个bug)。但是,此解决方案不再引发更改事件。如果单击“取消”命令,则“更改”事件将再次开始工作。因此,这是一个黑客,在我看来不是一个干净的解决方案。好吧,在这种情况下,我认为一种方法是使网格不可编辑,并在网格外添加一个按钮以添加新记录。单击弹出一个窗口,在使用ajax或其他东西提交到数据源/数据库时添加一条新记录,并重新绑定网格。是的,但是因为他们的网格已经带有验证、ajax调用等功能。简单地使用它更容易。我用方法4进行了更新,这是我计划采用的方法,除非有更好的解决方案。如果您想禁用编辑功能,那么为什么要使用单元格内编辑?单元格内编辑仅在编辑时才有意义,而在添加时没有意义。添加时,它与在线编辑没有太大区别。我相信这就是Telerik造成这种混乱的原因。理想情况下,创建和编辑必须是两个独立的操作。这样,任何人都可能只支持创建功能,而不支持编辑(或更新)。但事实并非如此。如果我想只支持创建功能而不添加编辑,它会抛出一个错误。试试看。这就是为什么我们会看到关于如何禁用网格编辑的问题。如果要禁用编辑功能,为什么要使用单元格内编辑?单元格内编辑仅在编辑时才有意义,而在添加时没有意义。添加时,它与在线编辑没有太大区别。我相信这就是Telerik造成这种混乱的原因。理想情况下,创建和编辑必须是两个独立的操作。这样,任何人都可能只支持创建功能,而不支持编辑(或更新)。但事实并非如此。如果我想只支持创建功能而不添加编辑,它会抛出一个错误。试试看。这就是为什么我们会看到关于如何禁用网格编辑的问题。
$("#Name").attr("readonly", true);