加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ASP MVC 5日期格式验证问题

发布时间:2020-12-15 08:22:44 所属栏目:百科 来源:网络整理
导读:在我的ASP MVC 5 Web应用程序中,我需要以特定格式显示日期.页面加载时,文本格式正确.但是,如果您编辑该值或只是尝试发布,则会显示验证错误: 该字段的定义如下: @*Creation*@ div class="form-group" @Html.LabelFor(model = model.Creation,new { @class =
在我的ASP MVC 5 Web应用程序中,我需要以特定格式显示日期.页面加载时,文本格式正确.但是,如果您编辑该值或只是尝试发布,则会显示验证错误:

该字段的定义如下:

@*Creation*@
    <div class="form-group">
        @Html.LabelFor(model => model.Creation,new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.Creation,"{0:dd/MM/yyyy}",new { @class = "form-control"})
            @Html.ValidationMessageFor(m => m.Creation)
        </div>
    </div>

viewmodel属性定义为:

[DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
    [Display(Name = "Creation",ResourceType = typeof(Resources.Resources))]
    public DateTime Creation { get; set; }

屏幕截图是使用Firefox浏览器创建的.如果我在Edge上执行相同的操作,则验证通过,但此方法在post方法上的绑定无效(默认日期值).

我该如何解决这个问题?

解决方法

这里的问题是,在幕后,验证实际上是由jQuery执行的.所以关键是要告诉jQuery验证器你将使用dd / MM / yyyy格式.

有几种方法可以做到这一点.最简单的方法是使用simpe tweak覆盖验证器函数(对于日期):

jQuery(function ($) {
    $.validator.addMethod('date',function (value,element) {
      $.culture = Globalize.culture("en-AU");
      var date = Globalize.parseDate(value,"dd/MM/yyyy","en-AU");
      return this.optional(element) || 
        !/Invalid|NaN/.test(new Date(date).toString());
    });
});

另一种方法是将全球化库用于jQuery.有一个全球化的图书馆,你可以使用here.

拥有库时,请包含以下文件:

globalize.js 
globalize.culture.en-AU.js

然后覆盖验证器函数:

<script type="text/javascript">
    $(function () {
        $.validator.methods.date = function (value,element) {
            Globalize.culture("en-AU"); // the UK format
            return this.optional(element) || Globalize.parseDate(value) !== null;
        }
    });
</script>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读