2016-04-30 28 views
1

In meinem Web-API-Projekt, habe ich Modellklasse RegisterModel, Es gibt nullable Datum Zeit, ich möchte Eingang Eingabe von Benutzer nur überprüfen, wenn Benutzer dob eingegeben hat. Ich Json.Net Serializer mitValidate Nullwert Datum Zeit mit fließenden Validierung

meine Modellklasse

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

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

Aber wenn ich pass Wert zB "dob": "123 April 2015" Es ModelState.IsValid gibt false zurück, gibt aber keine Validierungsnachricht zurück.

Antwort

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

Zuerst verwende ich 'FluentValidation' nicht' DataAnotation'. Zweite Meine Eigenschaft ist vom Typ 'DateTime' nicht Zeichenfolge. So sehen Sie bitte, bevor Sie Ihre Antwort posten. – Programmer

0

Validieren DateTime s mit fließend Validierung scheint nur nicht möglich, da here erwähnt. Diese answer scheint die nützlichsten Möglichkeiten zur tatsächlichen Validierung ungültiger Daten zu bieten.

Verwandte Themen