【问题标题】:JQuery calendar and MVC datetime submitJQuery 日历和 MVC 日期时间提交
【发布时间】:2013-09-05 17:32:19
【问题描述】:

我们都知道在不同的 UI 文化中显示日期时所面临的问题。但是在发布时,我们也遇到了这个问题,因为在发布时,ASP.NET MVC 并没有真正“自动”将给定的格式绑定到它认为合适的任何方式。

我的问题是,如何以 yyyy/MM/dd 格式回发日期,以便正确绑定到模型属性?

我想以文化的 UI 格式(即英国/美国等)显示日期格式,并让用户像往常一样从 jquery 日历中选择日期。但只有在发帖时,我才想做“更正”

最好的方法是什么?

【问题讨论】:

    标签: asp.net-mvc jquery-ui


    【解决方案1】:

    我遇到了同样的问题,并通过为日期添加一个备用字段来解决它,我将其发送给控制器。

    助手:

    public static CultureInfo UserCultureInfo()
    {
        // Retrieves the user culture info based on the browser request
        var userLanguages = HttpContext.Current.Request.UserLanguages;
    
        CultureInfo ci;
    
        if (userLanguages.Length > 0)
        {
            try
            {
                ci = new CultureInfo(userLanguages[0]);
            }
            catch (CultureNotFoundException)
            {
                ci = CultureInfo.InvariantCulture;
            }
        }
        else
        {
            ci = CultureInfo.InvariantCulture;
         }
    
         return ci;
    }
    

    HTML(Razor 视图):

    @{
        System.Globalization.CultureInfo curInfo = Helpers.UserCultureInfo();
    }
    
    <!-- You need to change the file to be loaded based on the Culture information returned above -->
    @Html.Script("DatePicker/i18n/jquery.ui.datepicker-en-GB")
    
    <!-- The hidden field should be the one posted back to the Controller -->
    <input type="hidden" name="myDate" id="myDate" value="" />
    
    <!-- This one is just to display the DatePicker -->
    <input type="text" id="myDatePickerField" name="myDatePickerField" />
    

    JS:

    $("#myDatePickerField").datepicker({
        altField: "#myDate",
        altFormat: "yy-mm-dd", // The date sent will be in the YYYY-MM-DD format (refer to the HTML code to understand this bit)
        dateFormat: "dd/mm/yy" // As I'm in the UK, I set the default format to DD/MM/YYYY
    });
    

    这只是一个开始,是关于如何实现预期结果的一个想法。当然,您需要实施更改才能完成它并使其适合您的网站。 如何检测用户区域设置信息并将其应用到您的解决方案有点更广泛和复杂。网络上有很多提示和教程。

    【讨论】:

    • 感谢 MelanciaUK 的快速和良好的响应。问题:我在哪里以及如何获取/初始化语言环境脚本?此外,altFormat - 它是如何工作的?我的意思是,当页面回发到控制器时它会使用它以我想要的格式格式化日期时间,以便活页夹可以正确解析它吗?最后 - 您引用的 altField 是什么?目前我只是这样: var dateFormatStr = 'yy/mm/dd' $('#NextPayDate').datepicker({ dateFormat: dateFormatStr });这显然不是我想要的。
    • 当用户在DatePicker 上选择一个日期时,它将以您设置的(YYYY-MM-DD) 格式填充备用字段。这两个字段都将发回Controller。在那里,您应该将隐藏字段视为您选择的日期。
    • 再次感谢,我肯定会对此表示赞赏,并提供反馈/标记为答案。另一个问题:如何获取和加载文化信息脚本?
    • 当您下载DatePicker 库时,它带有各种语言环境脚本。你可以看到我在帖子(Razor View)中加载了en-GB
    • 正如我所提到的,这更广泛。我的解决方案比这更复杂。我正在使用另一个脚本来检测时区等。文化信息将返回(在此示例中)是语言:en-GBen-US 等。您只需在脚本文件名中替换它即可。
    猜你喜欢
    • 2013-07-28
    • 2011-01-07
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多