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

ASP.NET MVC编辑时日历控件无法读取模型绑定的DateTime日期值问题

问题根因

你遇到的问题来自两个核心原因:

  1. asp-for Tag Helper的优先级高于手动写的value属性,只要页面绑定的模型不为空,Tag Helper会自动生成value值覆盖你手动写的逻辑。
  2. 浏览器原生日期输入框仅识别yyyy-MM-dd格式的标准值,你用Convert.ToString转换DateTime类型输出的格式不符合要求,就算手动赋值成功也不会正常渲染。

最优解决方案

不需要手动写value判断逻辑,直接在后台Action层统一处理模型默认值即可:

后台Action代码调整

创建场景下直接返回空的模型实例,不要返回null,这样asp-for会自动适配创建/编辑两种场景的填充逻辑:

public IActionResult Save(int? id)
{
    // 编辑场景:读取数据库对应数据
    if (id.HasValue)
    {
        var model = _db.你的表名.Find(id);
        return View(model);
    }
    // 创建场景:返回空模型实例,不要返回null
    return View(new 你的模型类名());
}

前端页面代码调整

删除手动写的value属性,给日期输入框加上type="date"标识即可:

<div class="form-group">
    <label asp-for="Description" class="control-label"></label>
    <input asp-for="Description" id="description" class="form-control" />
    <span asp-validation-for="Description" class="text-danger"></span>
</div>
<div class="form-group">
    <label asp-for="Expiraydate" class="control-label"></label>
    <input asp-for="Expiraydate" id="expirydate" class="form-control" type="date" />
    <span asp-validation-for="Expiraydate" class="text-danger"></span>
</div>

兼容方案(如果你必须保留手动判空逻辑)

将日期输入的value属性改成标准格式输出即可:

<input asp-for="Expiraydate" id="expirydate" class="form-control" type="date" 
       value="@(Model == null ? "" : Model.Expiraydate.ToString("yyyy-MM-dd"))" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:21:00