I have built a simple date check to validate if the date from the form is smaller then the current date.
ValidationAttribute
public class DateIsValidAttribute : ValidationAttribute
{
private const string DefaultErrorMessage = "Datumet är ogiltigt";
public string DateNotValidErrorMessage { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
DateTime? d = Convert.ToDateTime(value);
if (d > DateTime.Now)
{
return ValidationResult.Success;
}
return new ValidationResult(DateNotValidErrorMessage ?? DefaultErrorMessage);
}
}
ViewModel
[Required(ErrorMessage = "Prenumerationen måset ha ett startdatum")]
[Display(Name = "Startdatum")]
[DateIsValid(DateNotValidErrorMessage = "Ogiltigt datum.")]
public DateTime? StartDate { get; set; }
HTML
<div class="form-group">
<label asp-for="StartDate"></label>
<input type="text" asp-for="StartDate" class="form-control" id="startDate" />
<span asp-validation-for="StartDate" class="text-danger"></span>
</div>
The validation it self works as expected but the ErrorMessage wont show. All the other ErrorMessages I have in the ViewModel works. They use Default ValidationAttribute.