Grandnode MVC项目中仅显示DatePicker而非时间选择器的问题
解决Grandnode中DatePicker同时显示时间选择器的问题
我之前在Grandnode项目里也碰到过一模一样的情况——光加[DataType(DataType.Date)]有时候根本不管用,因为Grandnode的GrandEditorFor是自定义的编辑器模板,默认可能集成了日期+时间的渲染逻辑。试试下面这几个实用方案:
方案1:给模型补充DisplayFormat属性
在你的DateUtc属性上加上DisplayFormat特性,强制指定纯日期格式,并且开启编辑模式下的格式应用:
[DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime? DateUtc { get; set; }
这样GrandEditorFor就能识别到该属性只需要处理日期部分,不会额外渲染时间选择器。
方案2:替换为原生EditorFor并指定类型
如果方案1没生效,可以直接用ASP.NET Core原生的EditorFor,显式指定输入类型为date:
@Html.EditorFor(x => x.DateUtc, new { htmlAttributes = new { @type = "date", @class = "form-control" } })
原生编辑器会根据DataType.Date和指定的type属性,渲染浏览器原生的纯日期选择器,完全不会带时间。
方案3:直接使用原生输入框绑定属性
要是上面的方法都不太行,最直接的方式就是写原生input标签,绑定你的属性并指定type:
<input asp-for="DateUtc" type="date" class="form-control" />
这种方式完全绕开自定义编辑器的逻辑,浏览器会自动渲染只显示日期的选择器。
方案4:检查并修改Grandnode的编辑器模板
如果你的项目里自定义了编辑器模板(一般在Views/Shared/EditorTemplates目录下的DateTime.cshtml),可以打开模板看看是不是默认同时渲染了日期和时间选择器。你可以给模板加个判断,当属性标记了DataType.Date时只显示日期部分:
@model DateTime? @{ var isDateOnly = ViewData.ModelMetadata.DataTypeName == DataType.Date.ToString(); } @if (isDateOnly) { <input asp-for="@Model" type="date" class="form-control" /> } else { // 保留原来的日期+时间选择器代码 }
内容的提问来源于stack exchange,提问作者Desmond
相关产品推荐
相关产品推荐

