剃刀页面中的日期选择器始终显示为空白

时间:2018-09-13 10:53:34

标签: jquery asp.net-core-2.1 razor-pages

这是一件看似简单的事情,但我还没有开始工作。我正在构建一个简单的文件上传表单,我想要一个日期上传字段。我已经制作好模型,我想同时保存日期和时间:

[DataType(DataType.DateTime)]
public DateTime DateUploaded { get; set; }

然后在视图中:

<input asp-for="DateUploaded" class="form-control" value="@DateTime.Now.ToString("yyyy-MM-dd HH:mm")" />

但是日期选择器始终显示为空白,就像这样,我希望它自动将当前日期和时间加载到分钟:

enter image description here 尽管消息来源表明有一个价值。这使我相信它可能与jquery有关,但是我不知道那可能是什么,甚至不确定要寻找什么。到目前为止,仍未找到解决方案。

<input class="form-control" value="2018-09-13 13:36" type="datetime-local" data-val="true" data-val-required="The DateUploaded field is required." id=" name="DateUploaded" />

我还尝试向模型添加以下内容而没有结果:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm}", ApplyFormatInEditMode = true)]

1 个答案:

答案 0 :(得分:2)

首先,当您绑定到类型DateTime(和DataType的{​​{1}})的属性时,DateTime将呈现具有类型的输入InputTagHelper中的。这将触发支持的浏览器显示日期选择器控件,这就是您在此处看到的。但是,此内置控件仅适用于ISO格式的日期/时间值,而日期时间字符串则无效。如果无法将字符串解析为ISO日期时间,则将其视为null,因此不会显示任何值。

简短的说,您需要向其输入日期时间字符串,例如:datetime-local,或简单地输入yyyy-MM-dd\Thh:mm:ss

o

第二,当绑定到特定属性时(使用@DateTime.Now.ToString("o") ),您不应该手动提供值。相反,如果您希望该属性默认为asp-for,请将其设置为该属性的默认值:

DateTime.Now

在这种情况下,您实际上根本不需要格式化它,因为Razor会为您处理。

最后,对于Web应用程序,使用[DataType(DataType.DateTime)] public DateTime DateUploaded { get; set; } = DateTime.Now; 是一个非常糟糕的主意。该值将是服务器上的当前时间 ,几乎可以肯定的是,对于用户来说,不会是“现在”,除非它们恰好与服务器所在的时区相同。相反,请使用DateTime.Now甚至更好的DateTime.UtcNow