这是一件看似简单的事情,但我还没有开始工作。我正在构建一个简单的文件上传表单,我想要一个日期上传字段。我已经制作好模型,我想同时保存日期和时间:
[DataType(DataType.DateTime)]
public DateTime DateUploaded { get; set; }
然后在视图中:
<input asp-for="DateUploaded" class="form-control" value="@DateTime.Now.ToString("yyyy-MM-dd HH:mm")" />
但是日期选择器始终显示为空白,就像这样,我希望它自动将当前日期和时间加载到分钟:
尽管消息来源表明有一个价值。这使我相信它可能与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)]
答案 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
。