使用FormData传递List数据至.NET控制器时出现空值问题求助
解决FormData传递.NET列表模型绑定为null的问题
问题根源
你当前的前端代码只是将FileName和ID的值直接追加到TemplateFilesData[index]下,但.NET的模型绑定需要明确指定实体属性的完整路径,否则无法识别要映射到AttachmentDTO的哪个字段,最终导致列表元素全部为null。
修复方案
修改前端FormData的追加逻辑,明确指定每个属性的完整绑定路径:
var options = new FormData(); let existingFiles = viewModel.get("entity.TemplateFilesData"); existingFiles.forEach((item, index) => { if (item) { // 格式:集合名[索引].属性名 options.append(`TemplateFilesData[${index}].FileName`, item.FileName); options.append(`TemplateFilesData[${index}].ID`, item.ID.toString()); // long类型转字符串避免类型绑定问题 } });
后端控制器补充配置
确保控制器的Action参数添加[FromForm]特性,明确告知框架从FormData中绑定模型:
[HttpPost] public IActionResult YourActionName([FromForm] ContentTemplateViewModel model) { // 业务逻辑处理 return Ok(); }
额外注意事项
- 如果父类
AttachmentInfoDTO中包含必填属性,要么在后端将其设为可空(如public string? ParentProperty { get; set; }),要么前端同步传递对应值,否则模型绑定会失败。 - 数值类型(如
long类型的ID)建议转成字符串传递,避免跨端类型转换异常。
内容的提问来源于stack exchange,提问作者nick glav
相关产品推荐
相关产品推荐

