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

Kendo Grid中复选框值始终返回False问题求助

解决Kendo Grid复选框始终返回False的问题

我之前也遇到过类似的坑,结合你的代码片段,咱们一步步排查解决:

1. 先确认模型属性类型是否正确

首先检查你的PlannedValues模型里,IsHistoryUpdateIfPlannedValueChanged必须是布尔类型(bool或可空bool?),如果是字符串或者其他类型,Kendo Grid根本没法正确解析值,自然会一直返回False:

// 正确的模型定义示例
public class PlannedValueModel
{
    public int MetricID { get; set; }
    // 非可空布尔类型
    public bool IsHistoryUpdateIfPlannedValueChanged { get; set; }
    // 或者可空布尔类型(适用于允许未勾选也传递null的场景)
    // public bool? IsHistoryUpdateIfPlannedValueChanged { get; set; }
}

2. 根据网格场景调整复选框绑定方式

场景一:只读网格(只显示复选框,不需要编辑)

如果你的网格是只读状态,直接用ClientTemplate渲染复选框,确保和字段值关联:

columns.Bound(p => p.IsHistoryUpdateIfPlannedValueChanged)
       .Title("IsHistoryUpdateIfPlannedValueChanged")
       .Width(100)
       .HtmlAttributes(new { style = "text-align: center;" })
       // 用Kendo的模板语法判断是否勾选,同时设置禁用防止用户修改
       .ClientTemplate("<input type='checkbox' #= IsHistoryUpdateIfPlannedValueChanged ? 'checked' : '' # disabled='disabled' />");

场景二:可编辑网格(需要修改复选框值并提交)

如果要支持编辑,推荐用Kendo内置的布尔编辑器模板,或者自定义编辑模板:

方法一:使用内置编辑器模板

columns.Bound(p => p.IsHistoryUpdateIfPlannedValueChanged)
       .Title("IsHistoryUpdateIfPlannedValueChanged")
       .Width(100)
       .HtmlAttributes(new { style = "text-align: center;" })
       // 指定使用内置的布尔编辑器模板
       .EditorTemplateName("Boolean");

方法二:自定义编辑模板

先在Views/Shared/EditorTemplates目录下创建CustomBoolean.cshtml:

@model bool?
<input type="checkbox" 
       name="@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)" 
       id="@ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty)" 
       @(Model.HasValue && Model.Value ? "checked='checked'" : "") />

然后在网格列中引用这个模板:

columns.Bound(p => p.IsHistoryUpdateIfPlannedValueChanged)
       .Title("IsHistoryUpdateIfPlannedValueChanged")
       .Width(100)
       .HtmlAttributes(new { style = "text-align: center;" })
       .ClientTemplate("<input type='checkbox' #= IsHistoryUpdateIfPlannedValueChanged ? 'checked' : '' # class='checkbox' />")
       .EditorTemplateName("CustomBoolean");

3. 确保数据源配置正确指定字段类型

在网格的DataSource配置里,明确指定布尔字段的类型,避免Kendo自动解析出错:

.DataSource(dataSource => dataSource
    .Ajax()
    .Model(model => 
    {
        model.Id(p => p.MetricID); // 设置主键字段
        // 明确指定布尔字段的类型
        model.Field(p => p.IsHistoryUpdateIfPlannedValueChanged).Type(typeof(bool));
    })
    .Update(update => update.Action("UpdatePlannedValue", "YourController")) // 替换成你的更新接口
)

4. 后端接收时注意复选框的提交特性

复选框有个特性:只有勾选时才会提交值,未勾选时不会提交任何数据。如果你的模型属性是bool类型,未提交的话会默认赋值为False;如果是bool?类型,未提交会是null。

如果是批量提交网格数据,建议用Kendo的sync()方法提交,确保数据正确传递:

var grid = $("#plannedValueGrid").data("kendoGrid");
grid.dataSource.sync();

5. 排查ModelState绑定错误

在后端的Action里,检查ModelState.IsValid,如果绑定失败,也会导致值被重置为False。可以打印错误信息排查:

[HttpPost]
public ActionResult SavePlannedValues(List<PlannedValueModel> plannedValues)
{
    if (!ModelState.IsValid)
    {
        // 打印所有绑定错误,排查问题
        var errors = ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage);
        // 处理错误逻辑
    }
    // 保存逻辑
    return RedirectToAction("Index");
}

内容的提问来源于stack exchange,提问作者Ram Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:37:37