我有一个使用 RazorPages 的 ASP Core 2.2 项目,我正在绑定一些数据,其中一些数据发送给客户端,客户端需要在发送回之前根据需要编辑这些数据。
这对一切都非常有效,直到我想绑定一个 DateTime 对象。数据按预期绑定到 HTML datetime-local 控件,并根据网络流量,在 POST 请求表单数据中发回,但是 OnPost 中的 DateTime 对象始终读取为 01/01/0001
我已经在其他浏览器中检查过这一点,以防出现问题。 FireFox 甚至无法正确呈现本地日期时间(它只是一个文本框,而不是日期选择器)。
我还尝试将 DateTime 对象作为本地和 UTC 时间发送,并且我已将我的文化设置为 en-GB,因为这就是我所在的位置。
我的代码如下:
RequestLocalizationOptions localizationOptions = new RequestLocalizationOptions
{
SupportedCultures = new List<CultureInfo> { new CultureInfo("en-GB") },
SupportedUICultures = new List<CultureInfo> { new CultureInfo("en-GB") },
DefaultRequestCulture = new RequestCulture("en-GB")
};
app.UseRequestLocalization(localizationOptions);
每行的 StartAt 设置为:
StartAt = DateTime.Now.ToUniversalTime(),
并像这样绑定在视图上:
<input asp-for="@Model.CreationData.DataLines[lnNo].StartAt" class="form-control"/>
整个绑定对象是:
public class JobCreationData
{
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
public int SelectedJobWorkflow { get; set; }
public List<JobCreationDataLine> DataLines { get; set; } = new List<JobCreationDataLine>();
public class JobCreationDataLine
{
public int WorkflowVersionId { get; set; }
public string WorkflowVersionCode { get; set; }
public string WorkflowVersionDescription { get; set; }
public int SelectedWorkCenterId { get; set; }
public DateTime StartAt;
public List<JobCreationBusinessUnit> BusinessUnits { get; set; }
}
public class JobCreationBusinessUnit
{
public int WantedBusinessUnitId { get; set; }
public int BusinessUnitId { get; set; }
public string Alias { get; set; }
public bool IsRequired { get; set; }
public int SelectedBusinessUnitLineId { get; set; }
}
}
下面的屏幕截图显示了 HTML5 控件、绑定对象结果无效以及 OnPost 中发送的表单数据。
正如您所看到的,我显然希望 DateTime 能够正确绑定。
有任何想法吗?