在将字符串绑定到模型属性时配置日期时间格式



我的表单上有一个文本输入,当发送到服务器时,它以错误的格式绑定到我的模型的 DateTime 属性,它显示为MM/dd/yyyy而不是dd/MM/yyyy

到目前为止,我看到的最好的建议是将序列化程序区域性设置为如下所示,但它似乎没有区别。

services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.Culture = new CultureInfo("en-GB");
});

我不明白为什么我必须使用自定义模型绑定器,这似乎是应该通过文化来解决的问题。

如果要为日期绑定设置区域性,可以在ConfigureServices方法中配置以下设置:

services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new RequestCulture("en-GB");
options.SupportedCultures = new List<CultureInfo> { new CultureInfo("en-GB") };
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

第二。 确保在 UseMvc 之前调用UseRequestLocalization

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseRequestLocalization();
app.UseMvc();
} 

参考 : https://stackoverflow.com/a/44692569/10201850

事实证明,我只是在查询字符串中传递日期时才遇到问题。阅读一些文档后,事实证明,用于查询字符串中的模型绑定数据的默认区域性是固定区域性。

我通过绑定到一个字符串属性,然后解析到日期时间的第二个属性来解决这个问题,如下所示。

public class MyClass
{
public string MyDate { get; set; }
public DateTime? MyDateParsed
{
get { return !string.IsNullOrEmpty(MyDate) ? (DateTime?)DateTime.Parse(MyDate) : null; }
}
}

最新更新