我有两个字段“Price From”和“Price To”+“Currency Unit”。
我想确保: - 如果“From”和“To”都有值,那么“Price To”应为“>” “价格来自”。 - 如果“Price To”或“Price From”的“任何”具有值,则需要“货币单位”。
这可以在自定义验证器中实现吗?如果是,我在哪个地方放置它?或者我可以创建一个模型级验证器来在客户端和服务器端运行吗?
由于
答案 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>