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

ASP.NET Core 3.1 MVC应用DateOfBirth字段无法更新始终重置为默认值如何解决

问题排查与修复方案

核心问题

最直接的触发原因是模型绑定参数名称不匹配:

  • 编辑页的<input asp-for="DateOfBirth">生成的HTML元素name属性为DateOfBirth,提交时表单对应的字段键为DateOfBirth
  • 后端EditUser接口接收出生日期的参数命名为birthDate,和提交的字段名不匹配,导致模型绑定失败,DateTime值类型被自动赋值为默认值0001/1/1 0:00:00,更新到数据库就表现为被重置。

修复步骤

1. 修正控制器参数命名(优先修复)

把EditUser方法的出生日期参数名改为和提交字段一致的DateOfBirth,同时同步调用服务层的传参:

[HttpPost]
public async Task<IActionResult> EditUser(string firstName, string lastName, string email, DateTime DateOfBirth, string country)
{
    var userId = _userManager.GetUserId(User);
    await _userService.UpdateUserInfo(userId, firstName, lastName, email, DateOfBirth, country);
    return RedirectToAction("Detail", "Profile", new { id = userId });
}

更推荐直接用视图模型接收参数,避免零散参数命名出错:

[HttpPost]
public async Task<IActionResult> EditUser(ProfileModel model)
{
    var userId = _userManager.GetUserId(User);
    await _userService.UpdateUserInfo(userId, model.FirstName, model.LastName, model.Email, model.DateOfBirth, model.Country);
    return RedirectToAction("Detail", "Profile", new { id = userId });
}

2. 解决日期格式绑定问题

你当前设置的日期格式为MM.dd.yyyy,ASP.NET Core默认模型绑定对带点分隔的日期解析成功率较低,可任选以下方案优化:

  • 方案1:将编辑框改为日期类型输入,使用浏览器标准日期格式,避免解析问题:
<input type="date" asp-for="DateOfBirth" placeholder=" " />
  • 方案2:在视图模型字段上加[DataType(DataType.Date)]注解,或者自定义全局DateTime模型绑定规则,支持MM.dd.yyyy格式解析。
  • 方案3:将视图模型的DateOfBirth改为可空类型DateTime?,避免绑定失败时自动赋值默认值,可搭配非空校验避免非法提交:
[DisplayFormat(DataFormatString = "{0:MM.dd.yyyy}", ApplyFormatInEditMode = true)]
public DateTime? DateOfBirth { get; set; }

3. 额外排查点

检查模态框的出生日期输入框是否在提交表单的标签范围内,避免字段没有随表单一起提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:03