2016-04-30 57 views
1

在我的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; 
     } 
    } 

但是當我通過值,例如:「出生日期」: 「123 2015年4月」ModelState.IsValid返回false,但不返回驗證消息。

回答

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

    } 
+0

首先我使用'FluentValidation'而不是'DataAnotation'。第二個My Property的類型是'DateTime'而不是字符串。所以請在發佈您的答案之前看看。 – Programmer

0

驗證使用流利的驗證DateTime唯一似乎並不可能,因爲提到here。這answer似乎提供了實際驗證無效日期的最有用的方法。