ASP.NET MVC编辑时日历控件无法读取模型绑定的DateTime日期值问题
问题根因
你遇到的问题来自两个核心原因:
asp-forTag Helper的优先级高于手动写的value属性,只要页面绑定的模型不为空,Tag Helper会自动生成value值覆盖你手动写的逻辑。- 浏览器原生日期输入框仅识别
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
相关产品推荐
相关产品推荐

