如何在Razor视图中移除MVC日期选择器的时间并设置默认值
问题原因
你现有代码存在两个核心错误:
@Html.EditorFor的第二个参数是自定义编辑器模板的名称,不是日期格式字符串,你传入的{dd MM yyyy}不会生效,导致日期显示为默认的DateTime结构格式化结果EditorFor会优先读取绑定的模型属性值,你在htmlAttributes中传入的@value会被直接忽略,当模型中Birthdate未手动赋值时,就会使用DateTime类型的默认值DateTime.MinValue,也就是你看到的01-01-0001 00:00
解决方案
方案1(推荐):在ViewModel层设置默认值+格式注解
这是最符合MVC规范的实现方式,无需在视图中硬编码逻辑:
- 给你的
Birthdate属性加上数据注解,同时设置默认值:
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd MM yyyy}", ApplyFormatInEditMode = true)] public DateTime Birthdate { get; set; } = DateTime.Now;
- 视图中简化
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
相关产品推荐
相关产品推荐

