【问题标题】:jquery ui datepicker and mvc view model type datetimejquery ui datepicker 和 mvc 视图模型类型 datetime
【发布时间】:2015-02-01 19:50:44
【问题描述】:

我在我的视图模型上使用 jquery datepicker

这是我的看法:

@Html.TextBoxFor(o => o.JobStartDate, new { id = "dt1", @class = "input-block-level" })
@Html.ValidationMessage("JobStartDate")

还有我的脚本:

$("#dt1").datepicker({ dateFormat: "dd/mm/yy" });

如果我的日期

例如:日期 16/12/2014 会给我错误,而 12/12/2014 不会

这是我的视图模型:

[Required]
[DataType(DataType.Date)]
[Display(Name = "Start Date")]
public DateTime JobStartDate { get; set; }

我怀疑我的视图模型正在预期格式为 mm/dd/yyyy 的日期,而在我的日期选择器上我指定了 dd/mm/yy,有没有办法告诉我的视图模型我期待 dd/mm/ yy 格式,以便在日期 >= 12 时不会抛出错误消息。

【问题讨论】:

    标签: jquery asp.net-mvc datetime datepicker viewmodel


    【解决方案1】:

    您可以查看使用jquery globalize 或将以下内容添加到您的脚本中(当然假设服务器文化日期格式是'dd/MM/yyy')

    $.validator.addMethod('date', function (value, element) {
      if (this.optional(element)) {
        return true;
      }
      var valid = true;
      try {
        $.datepicker.parseDate('dd/mm/yy', value);
      }
      catch (err) {
        valid = false;
      }
      return valid;
    });
    $('#dt1').datepicker({ dateFormat: 'dd/mm/yy' });
    

    请使用@Html.ValidationMessageFor(m => m.JobStartDate)

    【讨论】:

      【解决方案2】:

      这里是 MVC 视图模型:

          public DateTime? date { get; set; }
      

      这是脚本:

          $('.DatePickers').datetimepicker({
              timepicker: false,
              format: 'd-M-Y',
              scrollInput: false,
              closeOnDateSelect: true
          });
      

      只读日期选择器的按键事件

          $(".DatePickers").keypress(function (event) { event.preventDefault(); });
      

      【讨论】:

        【解决方案3】:

        您需要创建一个自定义验证器。您需要修改您的属性以采用字符串值,而不是像这样

        public string JobStartDate {get; set; }
        

        然后你需要像这样创建你的自定义验证器

        public class CheckDateAttribute : ValidationAttribute
        {
            protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
                // Validate your Date here
            }
        }
        

        在此之后,您只需像这样装饰您的财产 -

        [CheckDate]
        public string JobStartDate {get; set;}
        

        这是custom validators的一个很好的教程

        【讨论】:

        • 这不会进行客户端验证(当然也不会解决 OP 问题),您永远不应该使用string 约会!
        猜你喜欢
        • 2011-10-24
        • 2013-04-10
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 2012-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多