我有一个使用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正确绑定。
有什么想法吗?
答案 0 :(得分:0)
根据您的要求,我会将其写为答案。
StartAt
字段应使用setter和getter转换为属性:
public DateTime StartAt { get; set; }
您可以通过制作custom model binder使代码更进一步。
想象一下,您正在使用不同的DateTime
格式和区域性,并且您希望所有值在提交到后端时都采用特定格式。您可以将它作为活页夹编写一次,而不必在任何地方手动完成,