Атрибуты проверки класса MVC3 - PullRequest
3 голосов
/ 16 мая 2011

Я создаю сайт для тихого аукциона. У моего класса есть свойство CurrentBidAmount и свойство SuggesBidAmount. Предлагаемая сумма предложения - это, в основном, текущая сумма ставки плюс текущий минимальный прирост ставки. (Таким образом, текущая ставка составляет 10 долларов США, а приращение ставки составляет 5 долларов США, тогда предлагаемая ставка составляет 15 долларов США). Когда заявитель вводит новое значение ставки, я хочу проверить, что новое значение по меньшей мере равно предлагаемомуBidAmount или больше.

Я хочу применить это на уровне класса. Проблема в том, что я не уверен в том, что такое теги атрибутов проверки, и не могу найти их в Google. Я, должно быть, использую неправильные условия поиска, но не могу их найти.

Тег [Compare] близок, но это дословное сравнение. Мне нужно сравнить одно свойство с другим и убедиться, что оно равно или больше, чем другое свойство.

Может кто-нибудь указать мне правильное направление?

1 Ответ

2 голосов
/ 16 мая 2011

Вы можете создать свой собственный атрибут проверки и просто переопределить его IsValid метод:

    [AttributeUsage(AttributeTargets.Class)]
    public class BidCompareAttribute : ValidationAttribute
    {
        public string CurrentBidPropertyName { get; set; }
        public string MinBidIncrementPropertyName { get; set; }

        public override bool IsValid(object value)
        {
            var properties = TypeDescriptor.GetProperties(value);
            var minBidIncrement = properties.Find("MinBidIncrement", true).GetValue(value) as IComparable;
            var currentBid = properties.Find("CurrentBid", true).GetValue(value) as IComparable;
            return currentBid.CompareTo(minBidIncrement) >= 0;
        }
    }

Чем использовать это так:

    [BidCompare(CurrentBidPropertyName = "CurrentBid", 
                MinBidIncrementPropertyName = "MinBidIncrement")]
    public class BidModel
    {
        public int CurrentBid { get; set; }    
        public int MinBidIncrement { get; set; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...