【问题标题】:MVC datetime model bind fail for spanish culture西班牙文化的 MVC 日期时间模型绑定失败
【发布时间】:2018-02-14 17:11:55
【问题描述】:

在 MVC 项目中,我遇到以下格式的西班牙日期问题:dd MMM yyyy HH:mm 转换为:14 feb. 2018 10:56

在 web.config 上,我将文化定义为:

<globalization culture="es-CR" uiCulture="es"/>

我的模型几乎可以毫无问题地绑定任何日期,但问题在于 March,西班牙语中的“Marzo”,显示为 mar. 任何包含 Month March 的日期都没有正确绑定到模型,并且是如何默认日期时间:1 ene. 0001 00:00:00

我认为问题在于 C# 无法正确解析日期,因为三月的短月份定义和西班牙语星期二的短星期定义是相等的。

March -> Marzo -> mar.
Tuesday -> Martes -> mar

有什么解决办法吗?

如果没有,任何指南,以便我可以编写自己的日期时间解析绑定方法。仅作为最后的资源选项。

注意:与任何西班牙文化相同的行为,eses-MXes-US 等...

【问题讨论】:

    标签: c# .net asp.net-mvc


    【解决方案1】:

    您可以使用DateTime.ParseExact 方法将输入解析为使用英文CultureInfoDateTime 值。然后可以使用DateTime.ToString 方法和西班牙语CultureInfoDateTime 值转换为字符串。

    var input = "Tuesday, July 26, 2011";
    var format = "dddd, MMMM dd, yyyy";
    
    var dt = DateTime.ParseExact(input, format, new CultureInfo("en-US"));
    
    var result = dt.ToString(format, new CultureInfo("es-ES"));
    // result == "martes, julio 26, 2011"
    

    考虑到西班牙用户可能更喜欢西班牙标准格式而不是您的自定义格式:

    var result = dt.ToString("D", new CultureInfo("es-ES"));
    // result == "martes, 26 de julio de 2011"
    

    【讨论】:

    • 其实可以,但是如何在模型绑定上使用 ParseExact 方法呢?当用户从 View 提交时,控制器上的 DateTime 未绑定,因此无法在那里使用 ParseExact。
    • 不知道,但你可以用英文输入日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多