2016-06-27 127 views
-2

我无法正常工作。我想允许用户选择start dateend date,如果start date大于end date我想要显示一条错误消息。我正在使用MVC。这是我在模型上的代码。MVC开始日期和结束日期验证

public class ModelClass : IValidatableObject 
{ 
    [Required(ErrorMessage = "ID Number is required")] 
    [Display(Name = "ID Number:")] 
    [RegularExpression(@"^(\d{13})$", ErrorMessage = "Enter a 13 digit ID number")] 
    public Int64 ID_Number { get; set; } 
    [Required(ErrorMessage = "The start date is required")] 
    [Display(Name = "Start Date:")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")] 
    public DateTime Start_Date { get; set; } 
    [Required(ErrorMessage = "The end date is required")] 
    [Display(Name = "End Date:")] 
    [GreaterThan("Start_Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")] 
    public DateTime End_Date { get; set; } 





    IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) 
    { 
     if (End_Date < Start_Date) 
     { 
      yield return new ValidationResult("EndDate must be greater than StartDate"); 
     } 
    } 
} 
+1

你可能需要像[这]自定义验证(http://stackoverflow.com/questions/10887824/greater-than-or-equal -to-today-date-validation-annotation-in-mvc3)。 –

+1

那你有什么问题? –

回答

0

这是你的模型应该如何看起来像:

public class ModelClass : IValidatableObject 
{ 
    [Required(ErrorMessage = "ID Number is required")] 
    [Display(Name = "ID Number:")] 
    [RegularExpression(@"^(\d{13})$", ErrorMessage = "Enter a 13 digit ID number")] 
    public Int64 ID_Number { get; set; } 
    [Required(ErrorMessage = "The start date is required")] 
    [Display(Name = "Start Date:")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")] 
    public DateTime Start_Date { get; set; } 
    [Required(ErrorMessage = "The end date is required")] 
    [Display(Name = "End Date:")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")] 
    public DateTime End_Date { get; set; } 


    IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) 
    { 
     if (End_Date < Start_Date) 
     { 
      yield return new ValidationResult("EndDate must be greater than StartDate"); 
     } 
    } 
} 

按下提交按钮,我们需要检查,该模型是有效的用户之后。

ModelState.IsValid

会去您模式,并将验证模型,如果桩模型是有效的(让你在你的模型决定的规则),那么它是有效的。

这是你的行动应该什么样子:

[HttpPost] 
public ActionResult Create(ModelClass modelClass) 
{ 
    if (ModelState.IsValid) 
    { 
     db.modelClass.Add(modelClass); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(modelClass); 
} 
+0

我做到了,当我提交它时,即使结束日期小于开始日期也不确认 –

+0

您是否使用ModelState.IsValid? –

+0

不,我用你发布的代码@Offir Pe'er: –

相关问题