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

ASP.NET Core MVC图片上传提交时SqlException错误排查求助

问题分析与解决方案

错误根源

数据库表AspNetUsers的PictureUrl列不允许空值,但提交时该字段传入了NULL,导致插入失败。结合代码来看,核心问题出在文件上传的绑定、表单配置及空值校验缺失这几个环节。

分步解决方案

1. 修复表单编码类型

上传文件的表单必须指定enctype="multipart/form-data",否则后台无法接收文件数据。修改视图中的form标签:

<form method="post" enctype="multipart/form-data">
    <!-- 其他表单元素 -->
    <div class="form-floating">
        <input type="file" name="Input.PictureUrl" class="form-control" aria-required="true" required />
        <span asp-validation-for="Input.PictureUrl" class="text-danger"></span>
    </div>
    <!-- 提交按钮 -->
</form>

2. 修正模型属性类型

确保你的InputModel(如注册页的输入模型)中,PictureUrl的类型是IFormFile而非string——文件类型的input只能绑定到IFormFile:

public class InputModel
{
    // 其他属性(如用户名、密码等)
    [Required(ErrorMessage = "请选择要上传的图片")]
    public IFormFile PictureUrl { get; set; }
}

3. 启用并完善后台空值校验

恢复并增强后台的空值判断逻辑,避免将NULL写入数据库:

ImageOperation image = new ImageOperation(_env);

// 先校验用户是否选择了文件
if (Input.PictureUrl == null || Input.PictureUrl.Length == 0)
{
    ModelState.AddModelError("Input.PictureUrl", "请选择要上传的图片");
    return Page();
}

string filename = await image.ImageUpload(Input.PictureUrl);

// 校验上传是否成功
if (filename == null)
{
    ModelState.AddModelError(string.Empty, "图片上传失败,请重试");
    return Page();
}

user.PictureUrl = filename;

4. 前端校验增强

给file输入框添加required属性,配合模型的[Required]特性,实现前后端双重校验,提前阻止无效提交。

额外说明

你之前修改文件名生成代码的操作不影响当前问题,因为错误的核心是PictureUrl字段为NULL,而非文件名格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:57:56