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

如何在Razor视图中移除MVC日期选择器的时间并设置默认值

问题原因

你现有代码存在两个核心错误:

  • @Html.EditorFor的第二个参数是自定义编辑器模板的名称,不是日期格式字符串,你传入的{dd MM yyyy}不会生效,导致日期显示为默认的DateTime结构格式化结果
  • EditorFor会优先读取绑定的模型属性值,你在htmlAttributes中传入的@value会被直接忽略,当模型中Birthdate未手动赋值时,就会使用DateTime类型的默认值DateTime.MinValue,也就是你看到的01-01-0001 00:00

解决方案

方案1(推荐):在ViewModel层设置默认值+格式注解

这是最符合MVC规范的实现方式,无需在视图中硬编码逻辑:

  1. 给你的Birthdate属性加上数据注解,同时设置默认值:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd MM yyyy}", ApplyFormatInEditMode = true)]
public DateTime Birthdate { get; set; } = DateTime.Now;
  1. 视图中简化EditorFor写法即可:
@Html.EditorFor(model => model.Birthdate, new { htmlAttributes = new { @class = "form-control" } })

方案2:改用TextBoxFor直接指定格式

如果不想修改模型代码,可以直接用TextBoxFor,它的第二个参数支持直接传入格式字符串:

@Html.TextBoxFor(model => model.Birthdate, "{0:dd MM yyyy}", new { @class = "form-control", @value = DateTime.Now.ToString("dd MM yyyy") })

方案3:保留EditorFor手动指定模板

如果你确实需要用EditorFor,可以传入内置的Date模板,配合默认值:

@Html.EditorFor(model => model.Birthdate, "Date", new { htmlAttributes = new { @class = "form-control", @Value = DateTime.Now.ToString("dd MM yyyy") } })

注意这里的value要大写为@Value,规避C#关键字冲突的同时避免被模型值覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:02