Я разобрался, как это делается.это действительно просто и прямо.
Что я сделал, так это то, что создал свой собственный RequiredAttribute
.вместо использования встроенного RequiredAttribute
.
Единственным недостатком является то, что вам нужно будет самостоятельно реализовать логику этого валидатора.
Я знаю, что некоторые могут подумать, что это слишком сложно - заново реализовать то, что уже есть.(заново изобретая колесо), но таким образом я получу полный контроль над логикой Validator и сообщением об ошибке.
Как вы можете видеть, логика реализована в методе IsValid()
ниже.
Воткласс RequiredAttribute, который я создал:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,
AllowMultiple = true,
Inherited = true)]
public sealed class RequiredAttribute : ValidationAttribute
{
private const string _defaultErrorMessage = // Error Message
// Notice that i can include the filed name in the error message
// which will be provided in the FormatErrorMessage Method
public RequiredAttribute()
: base(_defaultErrorMessage)
{
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
name);
}
public override bool IsValid(object value)
{
if (value == null || String.IsNullOrWhiteSpace(Convert.ToString(value)))
return false;
else
return true;
}
}
теперь, когда дело доходит до использования Validator, вам нужно будет предоставить полную ссылку на ваш новый класс, поскольку он будет конфликтовать со встроенным по умолчанию System.ComponentModel.DataAnnotations.RequiredAttribute
класс в моем примере выше.
в моем случае вот как будут выглядеть окончательные результаты:
[Amaly.Data.Validators.Required]
public string Username { get; set; }
Надеюсь, это было полезно.