剃须刀页面中的日期选择器始终显示为空白
Datepicker in razor pages always appears blank
这是一件看似简单的事情,但我还没有把它付诸实践。我正在构建一个简单的文件上传表单,我想要一个上传日期字段。我做了模型,我想保存日期和时间:
[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)]
首先,当您绑定到 DateTime
类型的 属性(以及 DateTime
类型的 DataType
)时,InputTagHelper
将呈现类型为 datetime-local
的输入。这将触发支持浏览器显示日期选择器控件,这就是您在此处看到的内容。但是,此内置控件仅适用于 ISO 格式的 date/time 值,而您的日期时间字符串则不是。如果无法将字符串解析为 ISO 日期时间,则会将其视为空值,因此不会显示任何值。
总而言之,您需要为其提供日期时间字符串,例如:yyyy-MM-dd\Thh:mm:ss
,或简单地 o
.
@DateTime.Now.ToString("o")
其次,当绑定到特定的 属性(使用 asp-for
)时,您不应手动提供值。相反,如果您希望 属性 默认为 DateTime.Now
,请将其设置为 属性:
的默认值
[DataType(DataType.DateTime)]
public DateTime DateUploaded { get; set; } = DateTime.Now;
在这种情况下,您实际上根本不需要格式化它,因为 Razor 会为您处理。
最后,使用 DateTime.Now
对于 Web 应用程序来说是一个非常糟糕的主意。该值将是服务器 上的当前时间 ,几乎可以肯定不会是用户的 "now",除非他们恰好与您的服务器处于同一时区居住。相反,使用 DateTime.UtcNow
或更好的 DateTimeOffset.UtcNow
.
这是一件看似简单的事情,但我还没有把它付诸实践。我正在构建一个简单的文件上传表单,我想要一个上传日期字段。我做了模型,我想保存日期和时间:
[DataType(DataType.DateTime)]
public DateTime DateUploaded { get; set; }
然后在视图中:
<input asp-for="DateUploaded" class="form-control" value="@DateTime.Now.ToString("yyyy-MM-dd HH:mm")" />
但是日期选择器总是显示空白,像这样,我想让它自动加载当前日期和时间,精确到分钟:
<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)]
首先,当您绑定到 DateTime
类型的 属性(以及 DateTime
类型的 DataType
)时,InputTagHelper
将呈现类型为 datetime-local
的输入。这将触发支持浏览器显示日期选择器控件,这就是您在此处看到的内容。但是,此内置控件仅适用于 ISO 格式的 date/time 值,而您的日期时间字符串则不是。如果无法将字符串解析为 ISO 日期时间,则会将其视为空值,因此不会显示任何值。
总而言之,您需要为其提供日期时间字符串,例如:yyyy-MM-dd\Thh:mm:ss
,或简单地 o
.
@DateTime.Now.ToString("o")
其次,当绑定到特定的 属性(使用 asp-for
)时,您不应手动提供值。相反,如果您希望 属性 默认为 DateTime.Now
,请将其设置为 属性:
[DataType(DataType.DateTime)]
public DateTime DateUploaded { get; set; } = DateTime.Now;
在这种情况下,您实际上根本不需要格式化它,因为 Razor 会为您处理。
最后,使用 DateTime.Now
对于 Web 应用程序来说是一个非常糟糕的主意。该值将是服务器 上的当前时间 ,几乎可以肯定不会是用户的 "now",除非他们恰好与您的服务器处于同一时区居住。相反,使用 DateTime.UtcNow
或更好的 DateTimeOffset.UtcNow
.