ASP.NET MVC 3中的范围条件验证

时间:2012-08-09 22:38:04

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

我有两个字段“Price From”和“Price To”+“Currency Unit”。

我想确保: - 如果“From”和“To”都有值,那么“Price To”应为“>” “价格来自”。 - 如果“Price To”或“Price From”的“任何”具有值,则需要“货币单位”。

这可以在自定义验证器中实现吗?如果是,我在哪个地方放置它?或者我可以创建一个模型级验证器来在客户端和服务器端运行吗?

由于

2 个答案:

答案 0 :(得分:1)

您可以通过指定IValidatableObject接口并定义所需的Validate()方法来处理模型中的验证作为模型级验证,如下所示:

public class Address : IValidatableObject
{

    public int PriceTo { get; set; }
    public int PriceFrom { get; set; }
    public int CurrencyUnit { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {

        var results = new List<ValidationResult>();

        if(PriceFrom != null && PriceTo != null)
        {
            if( ! PriceTo > PriceFrom )
            {
                results.Add (new ValidationResult("\"Price To\" must be greater than \"Price From\"", new List<string> { "PriceTo", "PriceFrom" }));
            }

        }

        if(PriceFrom != null || PriceTo != null)
        {
            if(CurrencyUnit == null)
            {
                results.Add (new ValidationResult("If you indicate any prices, you must specify a currency unit"", new List<string> { "CurrencyUnit" }))
            }
        }
        return results;
    }
}

注意,但是:我认为您的MVC客户端验证不会选择此规则,因此它只适用于服务器端。

答案 1 :(得分:1)

有一个很好的例子here,您需要稍微调整一下,但基本上我认为这是您正在寻找的技术,它既是客户端又是服务器验证。< / p>