我建立了一个简单的日期检查程序,以验证表单中的日期是否小于当前日期。
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>
它自己的验证可以正常工作,但是不会显示ErrorMessage。我在ViewModel中拥有的所有其他ErrorMessages都能正常工作。他们使用默认ValidationAttribute。
答案 0 :(得分:0)
我假设默认的ValidationAttribute类使用 IsValid方法中的ErrorMessage属性执行某些操作。在您的情况下,您对IsValid方法中的该属性不执行任何操作,因此ErrorMessage属性不会发生任何事情。
检查是否可以替代返回一个ValidationResult的IsValid方法,可以将其中的错误消息作为参数发送。如果计算成功,则可以返回ValidationResult.Success或任何您想要的东西。