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

Tabulator 4.9.3下拉框提交数据到C#出现整型字段类型不匹配如何解决?

问题根源

Tabulator的select编辑器默认会将选中值统一转为字符串类型,即使你定义的ProductIDSelect对象的键是数字类型,最终存入行数据时也会变成字符串格式的数值,导致后端整型字段校验失败。

解决方案

你可以根据自己的开发习惯选择以下任意一种方式处理:

1. 列编辑时实时转换类型

在对应下拉列的配置中添加cellEdited回调,选中值后立即转为数字类型:

{
  title: "ProductID", 
  field: "productID", 
  sorter: "number", 
  minWidth: 100, 
  width: 150, 
  editable: Editable, 
  validator: "required", 
  hozAlign: "left", 
  editor: "select", 
  editorParams: { values: ProductIDSelect }, 
  formatter: "lookup", 
  formatterParams: ProductIDSelect,
  // 新增以下回调,编辑完成后自动转数字
  cellEdited: function(cell) {
    const val = cell.getValue();
    if (!isNaN(Number(val))) {
      cell.setValue(Number(val), true); // 第二个参数为true避免重复触发编辑事件
    }
  }
}

注:你原有配置中重复定义了sorter和editor属性,后续的赋值会覆盖前面的,建议删掉冗余的sorter: "string"和editor: "number"避免逻辑混乱

2. 提交数据前统一批量转换

拿到表格全量数据后,统一处理需要转数值的字段,再提交给后端,这种方式适配多字段批量处理场景:

// 获取表格原始数据
const rawData = table.getData();
// 处理字段类型
const submitData = rawData.map(item => {
  return {
    ...item,
    productID: Number(item.productID),
    // 其他需要转整型的下拉字段都可以在这里添加
  }
});
// 再把submitData提交到C#后端即可

3. 后端兼容处理(无需改前端)

如果你不想修改前端代码,可以在C#后端配置JSON反序列化规则,自动把字符串格式的数字转为整型:

  • 如果你用的是System.Text.Json:给对应模型字段添加[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]特性即可
  • 如果你用的是Newtonsoft.Json:全局配置JsonSerializerSettings的NumberParseHandling = NumberParseHandling.Int64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:57:03