我有一个使用Asp.Net Core MVC框架的应用程序。我正在提交一个带有日期的表单。
表单大致如下:
@model EditCustomerViewModel
<form asp-action="Edit">
<input asp-for="ServiceStartDate" class="form-control" type="date" />
<input type="submit" value="Update" class="btn btn-success" />
</form>
控制器动作是:
[HttpPost]
public async Task<IActionResult> Edit(EditCustomerViewModel viewModel)
{
// do stuff
return RedirectToAction("Index");
}
视图模型是:
public class EditCustomerViewModel
{
public Guid Id { get; set; }
[DataType(DataType.Date)]
public DateTime ServiceStartDate { get; set; }
[DataType(DataType.Date)]
public DateTime? ServiceEndDate { get; set; }
// etc.
}
我在英国,因此日期格式不是美国格式:dd/MM/YYYY
。因此,默认情况下我提交的日期是6/22/2017
。
在调试期间查看控制器中的提交视图模型时,如果以英国格式提交,则日期为空,但如果使用美国格式,则正常。即6/22/2017
会给我null
,但22/6/2017
绑定到了正确的日期。
我尝试将以下内容添加到Startup.cs
中,但没有任何变化:
var supportedCultures = new[] { new CultureInfo("en-GB") };
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-GB"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-GB");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-GB");
CultureInfo.CurrentCulture = new CultureInfo("en-GB");
CultureInfo.CurrentUICulture = new CultureInfo("en-GB");
我已经检查了HTTP头,并发布了正确的头信息:
Accept-Language: en-GB,en
我做错了什么?如何告诉MVC Core绑定器绑定英国格式的日期?
p.s. 我正在使用带有*.csproj项目文件的VS2017,并且目标框架为.NetCoreApp 1.1