У меня есть пользовательское поле, общее количество баллов - user.points.Затем я разрешаю пользователю создать запись с количеством баллов, которое меньше или равно их общему количеству баллов пользователя.Я могу проверить это в контроллере, но я бы хотел проверить это на клиенте через атрибут модели.Это мой вспомогательный класс.
public class LessThanOrEqualAttribute : ValidationAttribute
{
public LessThanOrEqualAttribute(string otherProperty)
: base("{0} must be less than or equal {1}")
{
OtherProperty = otherProperty;
}
public string OtherProperty { get; set; }
public string FormatErrorMessage(string name, string otherName)
{
return string.Format(ErrorMessageString, name, otherName);
}
protected override ValidationResult
IsValid(object firstValue, ValidationContext validationContext)
{
var firstComparable = firstValue as IComparable;
var secondComparable = GetSecondComparable(validationContext);
if (firstComparable != null && secondComparable != null)
{
if (firstComparable.CompareTo(secondComparable) <= 1)
{
object obj = validationContext.ObjectInstance;
var thing = obj.GetType().GetProperty(OtherProperty);
var displayName = (DisplayAttribute)Attribute.GetCustomAttribute(thing, typeof(DisplayAttribute));
return new ValidationResult(
FormatErrorMessage(validationContext.DisplayName, displayName.GetName()));
}
}
return ValidationResult.Success;
}
protected IComparable GetSecondComparable(
ValidationContext validationContext)
{
var propertyInfo = validationContext
.ObjectType
.GetProperty(OtherProperty);
if (propertyInfo != null)
{
var secondValue = propertyInfo.GetValue(
validationContext.ObjectInstance, null);
return secondValue as IComparable;
}
return null;
}
}
Я нашел фрагменты этого из других постов, поэтому я пытаюсь собрать его вместе.
Затем у меня есть модель представления, которая включает в себя общееколичество пользовательских баллов.Я частично заполняю эту модель представления в Get.Затем я добавил помощника в поле точки на уровне записи.
[LessThanOrEqual("UserPoint")]
public int Points { get; set; }
Однако он не срабатывает.
Есть идеи?