You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kendo Grid配置:学生ID仅新增时可编辑,其余状态不可编辑

解决Kendo Grid中已有行ID不可编辑、新增行ID可编辑的问题

你遇到的这个问题很典型——全局设置model.Field(p => p.ID).Editable(false)会把新增行的ID编辑权限也一并锁死,我们需要动态判断行的状态来精准控制编辑权限,下面是两种可行的解决方案:

方案一:利用列的Editable函数动态判断(推荐)

这种方法最简洁直接,通过给ID列指定一个判断函数,根据当前行是否为新增行来决定是否允许编辑:

1. 修改Grid列配置

把你原来的ID列配置替换成下面的代码,同时去掉全局的Editable(false)设置:

@(Html.Kendo().Grid(Model)
    .Name("StudentModel")
    .Columns(column => {
        // 重点:用Editable("isIDEditable")替代全局不可编辑设置
        column.Bound(p => p.ID).Width(30).Editable("isIDEditable");
        column.Bound(p => p.First_Name).Width(100);
        column.Bound(p => p.Last_Name).Width(100);
        column.Bound(p => p.Division).Width(30);
        // 其他列配置...
    })
    .Editable(editable => editable.Mode(GridEditMode.InLine)) // 根据你的实际编辑模式调整,比如Popup
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => {
            model.Id(p => p.ID);
            // 不要在这里设置model.Field(p => p.ID).Editable(false)
        })
        // 数据源的其他配置(如Create/Update/Read方法)...
    )
)

2. 添加判断用的JavaScript函数

在页面的<script>标签里添加这个函数,它会接收当前行的model对象,通过isNew()方法判断是否为新增行:

<script>
function isIDEditable(model) {
    // 新增行返回true(允许编辑),已有行返回false(禁止编辑)
    return model.isNew();
}
</script>

方案二:自定义EditorTemplate(适合需要自定义控件的场景)

如果你需要对ID的编辑控件做更复杂的定制,可以通过EditorTemplate来实现:

1. 创建ID的EditorTemplate

在Views/Shared/EditorTemplates文件夹下创建一个名为IDEditor.cshtml的文件,内容如下:

@model int?

@* 判断是否为新增行:字段名包含"new"表示是新增的临时行 *@
@if (ViewData.TemplateInfo.GetFullHtmlFieldName("").Contains("new")) {
    @Html.TextBoxFor(m => m, new { @class = "k-textbox" })
} else {
    @* 已有行直接显示文本,不提供编辑控件 *@
    @Html.DisplayFor(m => m)
}

2. 在Grid列中引用这个模板

修改ID列的配置,引用刚创建的EditorTemplate:

column.Bound(p => p.ID).Width(30).EditorTemplateName("IDEditor");

为什么原来的方法不行?

model.Field(p => p.ID).Editable(false)是全局生效的配置,它会对所有行(包括新增的临时行)禁用编辑权限。而上面的两种方法都是通过判断行的状态(是否为新增)来动态控制权限,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者Oniel Telies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:34:11