Дата начала валидатора Nibite до даты окончания
-
14-11-2019 - |
Вопрос
Использование NHIBERNATE Validator (с помощью S # Harp Architecty / MVC3), как я могу написать пользовательский атрибут, предпочтительно, не имеющий объекта (поскольку это является довольно распространенным требованием), что обеспечивает то, что HONAGEA>= PropertyB (или болееОбщий случай, оба могут быть нулевым).
что-то вроде
public DateTime? StartDate { get; set; }
[GreaterThanOrEqual("StartDate")]
public DateTime? EndDate { get; set; }
.
Я вижу, что я могу переопределить генеракодицетагкод в конкретном классе GenaCodicetacode, но я не был уверен, что это был лучший подход, и я не видел, как предоставить сообщение в этом случае.
Решение
Когда вам нужно сравнить несколько свойств объекта как часть валидации, вам нужен валидатор CLAASS.Атрибут затем применяется к классу, а не свойство.
Я не думаю, что есть существующий, который нужно делать то, что вы хотите, но достаточно легко написать свой собственный.
Вот код кода, чтобы показать вам примерно, что может выглядеть ваш валидатор
[AttributeUsage(AttributeTargets.Class)]
[ValidatorClass(typeof(ReferencedByValidator))]
public class GreaterThanOrEqualAttribute : EmbeddedRuleArgsAttribute, IRuleArgs
{
public GreaterThanOrEqualAttribute(string firstProperty, string secondProperty)
{
/// Set Properties etc
}
}
public class ReferencedByValidator : IInitializableValidator<GreaterThanOrEqualAttribute>
{
#region IInitializableValidator<ReferencedByAttribute> Members
public void Initialize(GreaterThanOrEqualAttribute parameters)
{
this.firstProperty = parameters.FirstProperty;
this.secondProperty = parameters.SecondProperty;
}
#endregion
#region IValidator Members
public bool IsValid(object value, IConstraintValidatorContext constraintContext)
{
// value is the object you are trying to validate
// some reflection code goes here to compare the two specified properties
}
#endregion
}
.
}
Другие советы
В настоящее время, если мне нужно сделать это на модели, у меня есть модель реализована IValidatableObject
public class DateRangeModel : IValidatableObject {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> results = new List<ValidationResult>();
if (StartDate > EndDate)
{
results.Add(new ValidationResult("The Start Date cannot be before the End Date.", "StartDate"));
}
return results;
}
.
Это, кажется, обеспечивает хорошую интеграцию с существующей системой.Недостаток заключается в том, что поскольку это не применяется на объекте домена, вам нужна дополнительная логика там (или в слое услуг, которые создают объекты домена и т. Д.) Для обеспечения того, чтобы обеспечить его из этого конца, если в другом месте используется другая модельСоздание или обновление объектов домена.