0

「開始価格」と「終了価格」+「通貨単位」の 2 つのフィールドがあります。

確認したいこと: - "From" と "To" の両方に値がある場合、"Price To" は ">" "Price From" である必要があります。- "Price To" または "Price From" の "any" に値がある場合は、"Currency Unit" を必須にします。

これはカスタムバリデーターで実現できますか? はいの場合、どこに、どのフィールドに配置しますか? または、クライアント側とサーバー側で実行するモデル レベルのバリデータを作成することは可能でしょうか?

ありがとう

4

2 に答える 2

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 クライアント側の検証ではこのルールが適用されるとは思わないため、サーバー側にのみ適用されます。

于 2012-08-09T22:57:26.203 に答える
1

少し適応する必要がある良い例がここにありますが、基本的に、これはクライアントとサーバーの両方の検証である、あなたが探している手法だと思います。

于 2012-08-09T23:02:15.573 に答える