我们有许多Vue页面,有Typescript模型,它们提交给同一个控制器操作。控制器接收一个复杂的参数,而这个类的特点是有一个DateTime属性。
这些Vue页面经过一段时间的修改,现在看起来很不一样。然而,在所有的情况下,DateTime属性都是从一个输入的DateOfBirth字段中获取的,并与Moment进行映射。代码往往看起来有点像这样。
var dob = Helpers.ToMoment(this.inputDateOfBirth);
if (dob.isValid()) {
this.dateOfBirth = dob.format("YYYY-MM-DD HH:mm:ss");
}
两个 dateOfBirth
和 inputDateOfBirth
被列为类型 string
在Typescript模型中。
在大多数情况下,最终被控制器动作接收的复杂参数有这个DateTime属性作为 DateTime.Kind
的 Utc
. 然而,其中一个人,有一个 DateTime.Kind
的 Unspecified
. 这将导致进一步的问题。
在ASP.NET MVC中,C#控制器动作解释的数据的DateTime.Kind值是由什么决定的,我可以做些什么来确保它始终如一地作为Utc接收?
日期的格式可以导致这种差异。DateTime的默认模型绑定器期望 ISO 8601 Time zone designators
这意味着,如果你的日期字符串看起来像这样 2009-06-15T13:45:30.0000000Z
那么 DateTime.Kind
将是 UTC
作为 "Z "呈现。或者如果像这样 2009-06-15T13:45:30.0000000-07:00
,其中时区偏移为"-07:00"。DateTime.Kind
将是 Local
. 如果该属性没有出现。DateTime.Kind
将是 Unspecified
.