【问题标题】:ASP.net MVC Datepicker with date validation带有日期验证的 ASP.net MVC Datepicker
【发布时间】:2015-11-02 01:54:57
【问题描述】:

谁能告诉我这段代码有什么问题?当允许用户输入时,我正在尝试将 datepicker 日期上的日期验证为 mm/dd/yyyy。我使用了向我建议的验证代码,并在其中添加了一些其他代码,以确保当他们按下鼠标或按下 Tab 键时弹出日历消失(如果他们根本没有输入日期)。

   $(function () {
        $('.datepicker2').datepicker()
       .on('changeDate', function (ev) {
           $('.datepicker2').datepicker('hide');
       });
       ForceDatePickerFormat();
    });

    function ForceDatePickerFormat(dateValue) {
        $('.datepicker2').on('keydown', function (e) {
            var keyCode = e.keyCode || e.which;
            if (keyCode == 9) {
                $('.datepicker2').datepicker('hide');
            }
        });
        $(".datepicker2").on("blur", function (e) {
               var selectedDate = dateValue;
               if(selectedDate == '')
               return false;

               var regExp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
               var dateArray = selectedDate.match(regExp); // is format OK?

               if (dateArray == null){
                 return false;
               }

               month = dateArray[1];
               day= dateArray[3];
               year = dateArray[5];        

               if (month < 1 || month > 12){
                  return false;
               }else if (day < 1 || day> 31){ 
                  return false;
               }else if ((month==4 || month==6 || month==9 || month==11) && day ==31){
                  return false;
               }else if (month == 2){
               var isLeapYear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
               if (day> 29 || (day ==29 && !isLeapYear)){
                  return false
               }
            }
           return true;
        });
    }

【问题讨论】:

  • 你用的是什么日期选择器插件?为什么不只使用客户端验证?
  • 我正在使用 bootstrap-datepicker.js。我对 asp.net 很陌生...我在模型中使用 DataFormatString = "{0:MM/dd/yyyy},但客户希望强制用户输入 4 位数年份。还有哪些其他选项?客户端验证具体是什么意思?我尝试了正则表达式,但找不到有效的字符串。另外,客户想要下拉日历。欢迎任何帮助!
  • 如果您绑定到的属性是DateTime,并且您启用了客户端验证(包括jquery.validate.jsjquery.validate.unobtrusive.js)并包括@Html.ValidationMessageFor(m =&gt; m.yourDateProperty),那么所有这些都是开箱即用的(你不需要这些)
  • 所以,在模型中,我目前有这样的东西: [DisplayName("Need Date")] [DataType(DataType.DateTime, ErrorMessage = "Date not valid.")] [DisplayFormat( DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] public Nullable Need_Date { get;放;我是否保留这个,并将 ValidateMessageFor 放在视图中?
  • 所以,检查一下,我已经设置好了。问题是,它仍然允许用户输入 2 位数的年份。而且,它默认为 1915 年。我们必须强制使用 4 位数的年份,因为用户在未来输入日期......它并不总是 2000 年代。其他一切都由客户端验证处理。

标签: jquery asp.net asp.net-mvc date datepicker


【解决方案1】:

点击链接:

http://formvalidation.io/examples/jquery-ui-datepicker/

$(function() {

  $( "#jQueryValidateTest" ).validate();

  $( "[type=date]" ).datepicker({
    onClose: function() {
      $( this ).valid();
    }
  });
});
.valid {
  background: green;
  color: #fff;
}
.error {
  background: red;
  color: #fff;
}
<form id="jQueryValidateTest">
    <input type="date" required>
</form>​

【讨论】:

  • 谢谢!我也会用这个。抱歉,这个问题被标记为“无用”。我真的花了好几个小时研究。我只是在学习......我认为这就是这个板的用途。
  • 我使用 bootstrap datepicker 还是 jquery ui datepicker 有关系吗?而且,我应该使用最新版本吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多