MVC3类验证属性

时间:2011-05-16 03:54:25

标签: asp.net-mvc asp.net-mvc-3

我正在为无声拍卖创建一个网站。我的类有一个CurrentBidAmount属性和一个SuggestedBidAmount属性。 SuggestedBidAmount基本上是当前的出价金额加上当前的最低出价增量。 (因此目前的出价为10美元,出价增量为5美元,建议出价为15美元)。当投标人输入新的出价值时,我想验证新值是否至少与SuggestedBidAmount一样多。

我想在班级强制执行此操作。问题是,我不确定验证属性标签是什么,似乎无法在Google上找到它们。我必须使用错误的搜索字词,但我找不到它们。

[Compare]标签已关闭,但这是逐字比较的。我基本上需要将一个属性与另一个属性进行比较,并验证它是否等于或大于另一个属性。

任何人都可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

您可以创建自己的自定义验证属性,并覆盖其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; }
    }