2016-06-27 2 views
-2

У меня возникают трудности с тем, чтобы это работало. Я хочу разрешить пользователю выбирать start date и end 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: –

Смежные вопросы