Kendo ui 禁用Telerick MVC网格上的编辑

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

我有一个MVC剑道UI网格,如下所示

@(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);