I have this model
public class Person { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
I want to create a validation where either FirstName or LastName must be filled in by user. I installed FluentValidation
and created a customvalidator class
public class PersonValidator:AbstractValidator<Person> { public PersonValidator() { RuleFor((person=>person.FirstName)//don't know how to check if one is empty } }
To check just one field I could just do RuleFor(person => person.FirstName).NotNull();
But how do I check if one of them is null.
Also, is it possible, once validation is created via fluentValidation
, use it on the client side to show error?
Edit1
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); FluentValidationModelValidatorProvider.Configure(); } //creating validation namespace WebApplication1.Models.CustomValidator { public class PersonValidator:AbstractValidator<Person> { public PersonValidator() { RuleFor(m => m.FirstName).NotEmpty().When(m => string.IsNullOrEmpty(m.LastName)).WithMessage("*Either First Name or Last Name is required"); RuleFor(m => m.LastName).NotEmpty().When(m => string.IsNullOrEmpty(m.FirstName)).WithMessage("*Either First Name or Last Name is required"); } } } //model class [Validator(typeof(PersonValidator))] public class Person { public Person() { InterestList = new List<string>(); } public int Id { get; set; } public int ContactId { get; set; } [RequiredIfEmpty("LastName")] public string FirstName { get; set; } [RequiredIfEmpty("FirstName")] public string LastName { get; set; } public string EmailAddress { get; set; } public string Phone { get; set; } public string Country { get; set; } public List<string> InterestList { get; set; } } //view @model WebApplication1.Models.Person <script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> @Html.ValidationSummary(true) @using(Html.BeginForm("AddPerson","Person",FormMethod.Post)) { <div class="label">First Name</div> <div class="input-block-level">@Html.TextBoxFor(m=>m.FirstName)@Html.ValidationMessageFor(m=>m.FirstName)</div> <br/> <div class="label">Last Name</div> <div class="input-block-level">@Html.TextBoxFor(m=>m.LastName)@Html.ValidationMessageFor(m=>m.LastName)</div> <button type="submit" class="btn-primary">Submit</button> }