【发布时间】:2017-11-25 01:53:14
【问题描述】:
我有一个带有 MVC 的 Asp.Net Core 应用程序。我正在提交一个带有日期的表格。
表格看起来(大致)如下:
@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 binders 以 UK 格式绑定日期?
附言我在 VS2017 上使用 *.csproj 项目文件,目标框架为 .NetCoreApp 1.1
【问题讨论】:
-
另外
yyyy/MM/dd总是有效的。如果一切都失败了。 -
@Nkosi 与
CurrentCulture和CurrentUiCulture的所有舞蹈似乎对日期绑定没有任何影响。我可能会走你提到的第二种格式的道路 -
@Nkosi 是的,已经整理好了 - 我首先让自己感到困惑,但在剥开所有层之后它起作用了。
-
"如果以英国格式提交,日期为空,但如果使用美国格式则很好。即 2017 年 6 月 22 日给我空,但 22/6/2017 绑定到正确的日期" -我猜你得到了“ie”之后的部分混在一起。
标签: c# asp.net-mvc data-binding asp.net-core globalization