21

カスタム ValidationAttribute を作成して、システム内の一意の電子メール アドレスを検証できるようにしました。ただし、何らかの方法でカスタム パラメータを渡して、検証にロジックを追加したいと考えています。

public class UniqueEmailAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        //I need the original value here so I won't validate if it hasn't changed.
        return value != null && Validation.IsEmailUnique(value.ToString());
    }
}
4

4 に答える 4

53

このような?

public class StringLengthValidatorNullable : ValidationAttribute
{
    public int MinStringLength { get; set; }
    public int MaxStringLength { get; set; }

    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }
        var length = value.ToString().Length;

        if (length < MinStringLength || length >= MaxStringLength)
        {
            return false;
        }
        return true;
    }
}

使用する:

[StringLengthValidatorNullable(MinStringLength = 1, MaxStringLength = 16)]
public string Name {get; set;}
于 2013-02-14T16:04:56.443 に答える
0

@Oliverの答えのようなものを提案します(とにかく、それは私がすることです)が、定数を渡したくないことに気付きました。

では、このようなものはどうでしょうか。

public static class MyConfig
{
    public static int MinStringLength { get; set; }
    public static int MaxStringLength { get; set; }
    public static SomeObject otherConfigObject { get; set; }
}

そして、MyConfig.MinStringLength検証からアクセスしますか?ただし、あまりきれいではないことに同意します。

于 2013-02-21T14:57:47.100 に答える