我的表单上有一个文本输入,当发送到服务器时,它以错误的格式绑定到我的模型的 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; }
}
}