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

Kendo Grid更新时未向MVC控制器传递数据问题求助

Kendo Grid批量更新控制器接收不到数据的解决方法

问题场景

配置了单元格内编辑(GridEditMode.InCell)和批量保存按钮的Kendo Grid,加载数据正常,但点击「保存更改」后,MVC控制器的yearData参数始终为null。

解决步骤

1. 匹配Kendo默认的批量提交参数名

Kendo Grid批量更新时,默认会将修改的数据集合以models作为参数名提交到控制器。你需要将控制器方法的参数名从yearData改为models:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditingCustom_Update([DataSourceRequest] DataSourceRequest request, IEnumerable<Article7YearsViewModel> models)
{
    if (models != null && ModelState.IsValid)
    {
        foreach (var record in models)
        {
            var ID = record.ID;
            var SetType = record.SetType;
        }
    }

    return Json(models.ToDataSourceResult(request, ModelState));
}

如果不想修改参数名,也可以通过自定义JS函数序列化数据,指定参数名:

function serializeBatchData(data) {
    return { yearData: data.models };
}

然后在Grid的DataSource配置中绑定这个序列化函数:

.Update(update => update.Action("EditingCustom_Update", "Case").Data("serializeBatchData"))

2. 启用DataSource的批量操作模式

InCell编辑模式下的批量保存需要明确启用批量操作,在Ajax数据源配置中添加.Batch(true):

.DataSource(dataSource => dataSource
    .Ajax()
    .Batch(true) // 必须启用批量模式,否则不会打包提交多条修改数据
    .PageSize(1000)
    .Model(model =>
    {
        model.Id(p => p.ID);
        model.Field(p => p.SetType);
        model.Field(p => p.SetYears);
        model.Field(p => p.SetDate);
        model.Field(p => p.OrderDate);
        model.Field(p => p.Amount);
        model.Field(p => p.RefundSavings);
        model.Field(p => p.Notes);
    })
    .Read(read => { read.Action("Article7YearsFetch", "Case").Data("BuildObject"); })
    .Create(create => create.Action("EditingCustom_Create", "Case"))
    .Update(update => update.Action("EditingCustom_Update", "Case"))
)

3. 确保ViewModel的模型绑定兼容性

  • 确认ViewModel的所有属性都有公共的get和set方法(你的ViewModel已满足)。
  • 日期字段需保证格式匹配,可在ViewModel的日期属性上添加格式化特性:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? SetDate { get; set; }

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? OrderDate { get; set; }

4. 排查模型绑定错误

如果以上配置后仍接收不到数据,可通过查看ModelState的错误信息定位问题:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditingCustom_Update([DataSourceRequest] DataSourceRequest request, IEnumerable<Article7YearsViewModel> models)
{
    // 输出所有模型绑定错误
    foreach (var key in ModelState.Keys)
    {
        var state = ModelState[key];
        foreach (var error in state.Errors)
        {
            System.Diagnostics.Debug.WriteLine($"绑定错误:{key} - {error.ErrorMessage}");
        }
    }

    if (models != null && ModelState.IsValid)
    {
        foreach (var record in models)
        {
            var ID = record.ID;
            var SetType = record.SetType;
        }
    }

    return Json(models.ToDataSourceResult(request, ModelState));
}

内容的提问来源于stack exchange,提问作者Jonathan Small

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:13:19