在边缘浏览器中的 asp.net mvc 验证错误中使用 jQuery datepicker

Posted

技术标签:

【中文标题】在边缘浏览器中的 asp.net mvc 验证错误中使用 jQuery datepicker【英文标题】:Using jQuery datepicker in asp.net mvc validation error in Edge Browser 【发布时间】:2021-03-06 10:04:15 【问题描述】:

我正在使用jquery datepicker 验证器来验证文本输入。

我的问题是,如果我点击提交,它会正确显示所有错误消息。

但是,在日期选择器输入上,日期输入上的文本输入不验证23/11/2020,而是验证12/11/2020

在这种情况下,我认为脚本将月份更改为一天。

只有在 Edge 浏览器中调试 VS 2019 时才会发生这种情况...如果尝试使用 IE 8 浏览器,则验证正确。

这里可能会发生什么。谢谢

我的代码如下。

    public class PersonModel
    
        [Column(TypeName = "date")]
        [Display(Name = "Spanish Date")]
        [Required]
        [DataType(DataType.Date)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "0:dd/MM/yyyy")]
        public DateTime? SpanishDate  get; set; 
    

    @using (html.BeginForm("Index", "Home", FormMethod.Post))
    
        @Html.AntiForgeryToken()
        <div>
            @Html.ValidationSummary(true, "", new  @class = "text-danger" )

            <table cellpadding="0" cellspacing="0">
                <tr>
                    <td class="textarea">Spanish Date</td>
                    <td>

                        @Html.EditorFor(m => m.SpanishDate, "0:dd/MM/yyyy", new  htmlAttributes = new  @class = "textarea", placeholder = "Spanish Date", @readonly = "true"  )
                        @Html.ValidationMessageFor(m => m.SpanishDate, "", new  @class = "text-danger" )
                    </td>
                </tr>
            </table>
            <br />
            <hr class="new3">
            <div class="form-group">
                <div class="col-md-offset-5 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    

@section Scripts 

    @Scripts.Render("~/bundles/jqueryui")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/Scripts/DatePicker.js");
    @Styles.Render("~/Content/cssjqryUi")

    <script type="text/javascript">
        jQuery(function ($) 

            $.datepicker.regional['es'] = 
                 closeText: 'Cerrar',
                 prevText: '<Ant',
                 nextText: 'Sig>',
                 currentText: 'Hoy',
                 monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
                 monthNamesShort: ['Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
                 dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
                 dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
                 dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],
                 weekHeader: 'Sm',
                 dateFormat: 'dd/mm/yy',
                 firstDay: 1,
                 isRTL: false,
                 showMonthAfterYear: false,
                 yearSuffix: ''
            ;
            $.datepicker.setDefaults($.datepicker.regional['es']);
        );

        var options = $.extend(,
            $.datepicker.regional["es"], 
            dateFormat: "dd/mm/yy",
            changeMonth: true,
            changeYear: true,
            yearRange: "-2:+0",
            highlightWeek: true,
            maxDate: 0
        
        );
        $("#SpanishDate").datepicker(options);
    </script>

【问题讨论】:

【参考方案1】:

我测试发现如果我们一起使用jQuery datepicker和ASP.NET原始DateTime picker会出现日期格式冲突。

我建议您只使用 jQuery 日期选择器或原始的 ASP.NET 日期时间选择器。它们都可以验证日期值,您不需要一起使用它们。由于原来的 ASP.NET DateTime picker 在 IE 中无法使用,我建议你只使用 jQuery datepicker,然后代码可以在所有浏览器上正常运行:

...
<td>
    @Html.ValidationMessageFor(m => m.SpanishDate, "", new  @class = "text-danger" )
    <input type="text" id="SpanishDate" placeholder = "Spanish Date" />
</td>
...

边缘结果:

【讨论】:

感谢您的帮助。但在这种模式下,表单验证日期输入类型为 null.... jQuery datepicker 是一个前端插件,你只需要在前端验证输入的日期。可以参考this answer关于如何使用jQuery验证日期输入值。

以上是关于在边缘浏览器中的 asp.net mvc 验证错误中使用 jQuery datepicker的主要内容,如果未能解决你的问题,请参考以下文章

asp.net MVC 不显眼的浏览器错误

asp.net mvc 代码优先方法中的日期验证

ASP.NET MVC 网站开发总结——Ajax异步提交表单之检查验证码

ASP.NET Core 2.1:在 HTTP POST 验证失败后导航回页面显示浏览器错误

如何对asp.net mvc 4中的select2字段进行强制字段验证

ASP.NET MVC 页面验证失败(值无效。)