asp.net-mvc - MVC3 类验证属性

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

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

我想在类(class)层面强制执行这一点。问题是,我不确定验证属性标签是什么,并且似乎无法在 Google 上找到它们。我肯定使用了错误的搜索词,但我找不到它们。

[Compare] 标记很接近,但它会进行逐字比较。我基本上需要将一个属性与另一个属性进行比较,并验证它是否等于或大于另一个属性。

谁能给我指出正确的方向吗?

最佳答案

您可以创建自己的自定义验证属性,只需重写其 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; }
    }

关于asp.net-mvc - MVC3 类验证属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013016/

相关文章:

c# - 在没有 CodeFirst 的情况下访问 C#/.NET 中的数据库

c# - 如何在 ASP.NET MVC 中基于每个用户删除输出缓存?

c# - 如何使用 FirstOrDefault 避免 Object reference not set to instance of object 错误?

asp.net-mvc - 带有客户端进度反馈的异步处理asp.net mvc

asp.net-mvc - 带有 vNext : Do we still need the Global. asax 的 MVC 6?

asp.net - 返回新的RedirectResult()与返回Redirect()

css - 如何使用 razor 自定义 EditorFor CSS

jquery - 如何检查 jquery 函数中的非侵入性验证是否已得到验证?

c# - 找不到另一个 ASP.Net WebAPI 路由

asp.net-mvc - Web API Controller 和 MVC Controller - 身份验证