You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5 MVC中Bootstrap Datetimepicker英国日期格式提交识别错误问题

故障原因

ASP.NET Core 默认的 DateTime 模型绑定逻辑使用美式日期格式 MM/DD/YYYY 作为解析基准,你提交的英国格式 DD/MM/YYYY 日期在日部分大于12时无法被识别为合法日期,最终返回 DateTime 类型的默认值 0001/01/01 00:00:00。

解决方案

可以根据你的业务场景选择以下任意一种方案:

方案1:全局配置站点区域为英国(适合全站面向英国用户使用)

在 Startup.cs 中添加区域配置:

  1. 在 ConfigureServices 方法中添加如下代码:
using System.Globalization;
using Microsoft.AspNetCore.Localization;

public void ConfigureServices(IServiceCollection services)
{
    // 你的原有其他配置保留

    var gbCulture = new CultureInfo("en-GB");
    services.Configure<RequestLocalizationOptions>(opt =>
    {
        opt.DefaultRequestCulture = new RequestCulture(gbCulture);
        opt.SupportedCultures = new List<CultureInfo> { gbCulture };
        opt.SupportedUICultures = new List<CultureInfo> { gbCulture };
    });

    services.AddControllersWithViews();
}
  1. 在 Configure 方法的最开头启用区域配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRequestLocalization();
    // 你的原有其他中间件配置保留
}

方案2:仅对指定日期属性配置格式(灵活不影响其他业务)

给 WeddingWizardViewModel 的 WeddingDate 属性添加绑定特性即可:

using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;

public class WeddingWizardViewModel
{
    [DataType(DataType.DateTime)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm:ss}", ApplyFormatInEditMode = true)]
    public DateTime WeddingDate { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

方案3:自定义模型绑定器(格式校验更严格)

如果需要严格校验日期格式,避免其他格式的日期被误解析,可以自定义绑定规则:

  1. 新增自定义绑定器类:
using System.Globalization;
using Microsoft.AspNetCore.Mvc.ModelBinding;

public class GbDateTimeBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext context)
    {
        var valueResult = context.ValueProvider.GetValue(context.ModelName);
        if (valueResult == ValueProviderResult.None) return Task.CompletedTask;
        
        context.ModelState.SetModelValue(context.ModelName, valueResult);
        var dateStr = valueResult.FirstValue;
        
        if (DateTime.TryParseExact(dateStr, "dd/MM/yyyy HH:mm:ss", 
            CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out var date))
        {
            context.Result = ModelBindingResult.Success(date);
        }
        else
        {
            context.ModelState.TryAddModelError(context.ModelName, "日期格式不合法,请选择正确的日期");
        }
        return Task.CompletedTask;
    }
}
  1. 在属性上指定使用该绑定器:
[ModelBinder(BinderType = typeof(GbDateTimeBinder))]
public DateTime WeddingDate { get; set; }

内容的提问来源于stack exchange,提问作者Matthew Warr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:45:05