using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; using System.Web.Mvc; namespace Mvc { [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class PriceValidationAttribute : ValidationAttribute, IClientValidatable { private decimal minPrice = 0.01M; private decimal maxPrice = 100.00M; public PriceValidationAttribute(double min,double max) { minPrice = Convert.ToDecimal(min); maxPrice = Convert.ToDecimal(max); } public override bool IsValid(object value) { var price = (decimal?)value; if (price.HasValue) { if (price < this.minPrice || price > this.maxPrice) return false; } return true; } public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule = new ModelClientPriceRangeValidationRule(base.ErrorMessage, this.minPrice, this.maxPrice); yield return rule; } } public class ModelClientPriceRangeValidationRule : ModelClientValidationRule { public ModelClientPriceRangeValidationRule(string errorMessage, decimal minPrice, decimal maxPrice) { ErrorMessage = errorMessage; ValidationType = "priceonrange"; ValidationParameters.Add("minprice", minPrice); ValidationParameters.Add("maxprice", maxPrice); } } }