使用流畅的验证验证可以为空的日期时间

时间:2016-04-30 15:56:22

标签: c# asp.net asp.net-mvc asp.net-web-api fluentvalidation

在我的web api项目中,我有模型类RegisterModel,可以为空的日期时间,我想验证输入仅在用户输入dob时输入。 我正在使用Json.Net Serializer

我的模特课

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

我的验证员

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;
        }
    }

但是当我传递价值时,例如:“dob”:“123 APR 2015”ModelState.IsValid返回false,但不返回验证消息。

2 个答案:

答案 0 :(得分: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; }

   }

答案 1 :(得分:0)

如上所述[{3}},似乎无法使用流畅验证来验证DateTime。这here似乎提供了实际验证无效日期的最有用方法。