自定义ValidationAttribute ErrorMessage无法按预期工作

时间:2018-08-22 07:44:48

标签: c# viewmodel modelstate validationattribute

我建立了一个简单的日期检查程序,以验证表单中的日期是否小于当前日期。

  

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。

1 个答案:

答案 0 :(得分:0)

我假设默认的ValidationAttribute类使用 IsValid方法中的ErrorMessage属性执行某些操作。在您的情况下,您对IsValid方法中的该属性不执行任何操作,因此ErrorMessage属性不会发生任何事情。

检查是否可以替代返回一个ValidationResult的IsValid方法,可以将其中的错误消息作为参数发送。如果计算成功,则可以返回ValidationResult.Success或任何您想要的东西。