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
相关产品推荐
相关产品推荐

