我在视图模型上使用jquery datepicker

这是我的视图:

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


和我的脚本:

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


如果我的日期<= 12,一切正常,如果我的日期超过12,它将显示一条验证错误消息,提示“字段开始日期必须是日期。” (我正在使用jquery验证)

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

这是我的观点型号:

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


我怀疑我的视图模型正在预期格式为mm / dd / yyyy的日期,而在日期选择器中我指定了dd / mm / yy,有没有一种方法可以告诉我的视图模型我希望使用dd / mm / yy格式,因此如果日期> = 12,则不会引发错误消息。

#1 楼

您可以查看使用jquery全球化或将以下内容添加到脚本中(当然,假定服务器区域性日期格式为'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;}


这是有关自定义验证器的一个很好的教程

评论


这不会进行客户端验证(并且肯定不会解决OP问题),并且您绝对不应在日期中使用字符串!

–user3559349
2014年12月4日下午5:31