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

ASP.NET Core MVC文件上传后AddUserId与TaskId存入数据库为0的问题

问题解决:ASP.NET Core MVC Ajax上传文件时AddUserId与TaskId无法正确绑定

核心问题出在前端FormData的键名与后端模型绑定不匹配,导致控制器无法正确接收AddUserId和TaskId的值,最终数据库存入默认值0。

解决方案步骤

1. 修正前端FormData的键名

前端代码中,你用了model.AddUserId和model.TaskId作为FormData的键名,但后端控制器的参数是直接的TaskListAttachment对象,而非名为model的参数。需要去掉model.前缀,直接使用实体的属性名:

var formData = new FormData();
// 去掉model.前缀,直接对应实体属性名
formData.append("AddUserId", addUserId);
formData.append("TaskId", taskId);
formData.append("file", $("#fileInput")[0].files[0]);

2. 明确后端模型绑定来源(可选但推荐)

在控制器的TaskListAttachment参数上添加[FromForm]特性,明确指定从表单数据中绑定,避免歧义:

[HttpPost]
public IActionResult AddFile(IFormFile file, [FromForm] TaskListAttachment taskListAttachment)
{
    // 调试时可先打印值,确认是否接收成功
    // Console.WriteLine($"AddUserId: {taskListAttachment.AddUserId}, TaskId: {taskListAttachment.TaskId}");
    
    if (file != null && file.Length > 0)
    {
        var fileName = Path.Combine("wwwroot/files", Path.GetFileName(file.FileName));
        using (var stream = new FileStream(fileName, FileMode.Create))
        {
            file.CopyTo(stream);
        }
        taskListAttachment.FileName = file.FileName;
        taskListAttachment.ContentType = file.ContentType;
        taskListAttachment.Data = new byte[file.Length];
        taskListAttachment.AddDateTime = DateTime.Now;
        taskListAttachment.FilePath = fileName;
        taskListAttachmentManager.itemAdd(taskListAttachment);
        var addValue = JsonConvert.SerializeObject(taskListAttachment);
        return Json(addValue);
    }
    else
    {
        return Json(null);
    }
}

原理说明

ASP.NET Core的模型绑定机制会根据参数名和FormData键名的匹配关系来赋值。原代码中model.AddUserId的键名,会让绑定器尝试寻找名为model的参数(而你的参数是taskListAttachment),因此无法正确赋值,最终使用属性的默认值0存入数据库。修正键名后,绑定器会直接将值映射到taskListAttachment的对应属性上。

内容的提问来源于stack exchange,提问作者Gökmen Ada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:37:25