【问题标题】:Asp.net MVC set validation date format fails on ChromeAsp.net MVC 设置验证日期格式在 Chrome 上失败
【发布时间】:2012-10-11 18:04:09
【问题描述】:

我在 asp.net mvc 中设置验证日期格式 Chrome 时遇到问题,对于 IE 等其他浏览器,Firefox 可以正常工作。

我已经在我的模型中定义了日期,比如下一个代码:

[Required]
[Display(Name = "Data fi publicació")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime PublishingEndDate { get; set; }

在我看来:

@Html.TextBoxFor(model => model.PublishingEndDate)
@Html.ValidationMessageFor(model => model.PublishingEndDate)

问题似乎@Html.ValidationMessageFor 使用MM/dd/yyyy 格式验证日期,但我想要的是使用欧洲格式dd/MM/yyyy 进行验证。如何将默认文化验证格式日期更改为 dd/MM/yyyy

感谢您的帮助

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

最后我发现这个问题只影响 Chrome,用 IE,Firexfox 完美运行,似乎是一个 chrome 错误,我在http://forums.asp.net/t/1729179.aspx/1找到了解决方案

必须使用以下代码覆盖 jquery 的验证器方法:

$(document).ready(function () {
    $('.calendarPicker').datepicker({ dateFormat: "dd/mm/yy" });

$.validator.addMethod('date',
    function (value, element, params) {
        if (this.optional(element)) {
            return true;
        }

        var ok = true;
        try {
            $.datepicker.parseDate('dd/mm/yy', value);
        }
        catch (err) {
            ok = false;
        }
        return ok;
    });
});

【讨论】:

  • 我的问题是,如果我在日期选择器中选择了第二个日期,它会给我一个验证错误 - 仅在 Chrome 中(使用 40.0.2214.115)。该解决方案在原始问题发布近三年后修复了它!不错!
【解决方案2】:

确保您已在 web.config 中设置文化。这将为所选的文化使用适当的日期和数字格式。

http://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.100).aspx

【讨论】:

    【解决方案3】:

    这对我有帮助:

    $(function() {
                $(".datepicker").datepicker({
                    todayBtn: true,
                    language: "en-GB",
                    format: "dd/mm/yyyy",
                    clearBtn: true,
                    pickTime: false
                });
    
                $.validator.addMethod("date",
                    function(value, element) {
                        return this.optional(element) || parseDate(value, "dd-MM-yyyy") !== null;
                    });
            });
    

    【讨论】:

      【解决方案4】:

      为避免客户端验证,您不希望任何与输入关联的 data-val 属性。所以我所做的是写下纯 HTML,而不是使用 TextFor 或 EditorFor 等...

      <input type="text" class="datepicker form-control">
      

      对我来说很好......

      【讨论】:

        【解决方案5】:

        如果您不想使用日期时间选择器:

        由于 jquery.validate.unobtrusive.min.js 中的 MVC 错误(甚至在 MVC 5 中)可能会出现客户端验证问题,该错误不接受任何日期/日期时间格式。不幸的是,您必须手动解决它。

        我的最终解决方案:

        之前必须包含:

        @Scripts.Render("~/Scripts/jquery-3.1.1.js")
        @Scripts.Render("~/Scripts/jquery.validate.min.js")
        @Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
        @Scripts.Render("~/Scripts/moment.js")
        

        您可以使用以下方式安装 moment.js:

        Install-Package Moment.js
        

        然后你终于可以为日期格式解析器添加修复:

        $(function () {
            $.validator.methods.date = function (value, element) {
                return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
            }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-19
          • 1970-01-01
          • 2014-03-16
          • 2011-09-17
          • 1970-01-01
          • 1970-01-01
          • 2015-04-17
          • 2013-04-23
          相关资源
          最近更新 更多