Добавление атрибута данных в модель asp.net mvc - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть пользовательское поле, общее количество баллов - 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; }

Однако он не срабатывает.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...