【问题标题】:jQuery validation for dates in dd/mm/yyyy formatdd/mm/yyyy 格式日期的 jQuery 验证
【发布时间】:2014-05-07 09:33:54
【问题描述】:

我正在开发一个 ASP.NET MVC 5 项目。我在这样的视图中有两个文本框...

@Html.TextBox("earliestDate", Model.Checklists.EarliestDate)
@Html.TextBox("latestDate", Model.Checklists.LatestDate)

我正在输入日期“01/03/2014”(2014 年 3 月 1 日)和“31/03/2014”(2014 年 3 月 31 日)。当我在控制器中放置断点时,我可以看到控制器中 earlyDate 的值为“03/01/2014”(我输入的日期和月份已交换),而 latestDate 为空。如果我以 yyyy-MM-dd 格式输入日期,则代码可以正常工作。

我遵循了this 文章中的建议。

我已安装“globalize.js”并将文章中的代码添加到我的视图中。没有任何改变,我仍然得到上述结果。所以我尝试修改代码以明确指定所需的文化,旧代码注释掉,我的新代码在它下面......

@*<script src="~/Scripts/globalize/cultures/globalize.culture.@(System.Threading.Thread.CurrentThread.CurrentCulture.Name).js"></script>*@
<script src="~/Scripts/globalize/cultures/globalize.culture.en-IE.js"></script>

和...

//Globalize.culture('@(System.Threading.Thread.CurrentThread.CurrentCulture.Name)');

Globalize.culture('en-IE');

这仍然没有任何区别。所以我尝试像这样将所需的格式显式添加到validator.methods.date 函数中......

$.validator.methods.date = function (value, element) {
    return this.optional(element) ||
        Globalize.parseDate(value) ||
        Globalize.parseDate(value, "dd-MM-yyyy") || // new code
        Globalize.parseDate(value, "yyyy-MM-dd");
}

仍然没有区别。我错过了什么?

作为参考,这里是完整的脚本部分,包括上述修改...

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")

    <script src="~/Scripts/globalize/globalize.js"></script>
    @*<script src="~/Scripts/globalize/cultures/globalize.culture.@(System.Threading.Thread.CurrentThread.CurrentCulture.Name).js"></script>*@
    <script src="~/Scripts/globalize/cultures/globalize.culture.en-IE.js"></script>
    <script>
    $.validator.methods.number = function (value, element) {
        return this.optional(element) ||
            !isNaN(Globalize.parseFloat(value));
    }
    $(document).ready(function () {
        //Globalize.culture('@(System.Threading.Thread.CurrentThread.CurrentCulture.Name)');
        Globalize.culture('en-IE');
    });
    </script>
    <script>
        jQuery.extend(jQuery.validator.methods, {
            range: function (value, element, param) {
                //Use the Globalization plugin to parse the value
                var val = Globalize.parseFloat(value);
                return this.optional(element) || (
                    val >= param[0] && val <= param[1]);
            }
        });
        $.validator.methods.date = function (value, element) {
            return this.optional(element) ||
                Globalize.parseDate(value) ||
                Globalize.parseDate(value, "dd/MM/yyyy") || // new code
                Globalize.parseDate(value, "yyyy-MM-dd");
        }
    </script>
}

【问题讨论】:

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


【解决方案1】:

你的 jQueryval Bundle 中有什么?

我也有同样的问题,我通过添加脚本~/Scripts/globalize/globalize.js来解决它

此脚本解决了日期问题,但添加了一个新的数字验证问题。 如果没有这个脚本,日期验证是错误的,数字验证是​​好的......

【讨论】:

  • 感谢您的帮助,但如果您再仔细看看我的问题,并且在参考的文章中,您会发现我已经尝试过了。
猜你喜欢
  • 2014-01-18
  • 2017-04-07
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2016-01-02
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多