1

In my web api project, I have model class RegisterModel, There is nullable date time, I want to validate input enter by user only when if user has enter the dob. I'm using Json.Net Serializer

my model class

 [Validator(typeof(RegisterModelValidator))]
   public class RegisterModel
    {
        [JsonProperty("dob")]
        public Nullable<DateTime> DOB { get; set; }
    }

my validator

public class RegisterModelValidator : AbstractValidator<RegisterModel>
    {
        public RegisterModelValidator()
        {
            RuleFor(x => x.DOB).Must(BeAValidDate).WithMessage("Please enter valid date.");
        }
        private bool BeAValidDate(DateTime date)
        {
            if (date == default(DateTime))
                return false;
            return true;
        }
        private bool BeAValidDate(DateTime? date)
        {
            if (date == default(DateTime))
                return false;
            return true;
        }
    }

But when I pass value e.g: "dob":"123 APR 2015" It ModelState.IsValid return false, But does not return validation message.

Programmer
  • 398
  • 1
  • 9
  • 33

2 Answers2

0
 public ActionResult UpdateDateOfBirth(ModelClass model)
    {
            if (ModelState.IsValid)
            {
                // your logic
            }
            AddErrors(ModelState);
            return View();
    }

    // in my case i have to be add in viewbag
    private void AddErrors(ModelStateDictionary result)
    {

        ViewBag.ErrorMessages = result;
        //foreach (KeyValuePair<string,System.Web.Mvc.ModelState> error in result)
        //{              
        //    //ModelState.AddModelError(error.Key,error.Value.Errors[0].ErrorMessage);

        //}
    }

   // and you can add the validation message on 
   public class ModelClass
   {
    [StringLength(100, ErrorMessage = "Not a valid date of birth"]
    [DataType(DataType.DateTime)]
    [Display(Name = "Date of Birth")]
    public string DateOfBirth{ get; set; }

   }
Aniket Sharma
  • 1,000
  • 10
  • 16
  • First I'm using `FluentValidation` not `DataAnotation`. Second My Property is of type `DateTime` not string. So Please see before posting your answer. – Programmer Apr 30 '16 at 18:30
0

Validating DateTimes using fluent validation only does not seem to possible, as mentioned here. This answer seems to provide the most useful ways of actually validating invalid dates.

Community
  • 1
  • 1
Alexei - check Codidact
  • 22,016
  • 16
  • 145
  • 164