0

モデルに次のプロパティがあります。

[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)]
public List<KeyValuePair<int, string>> Authors { get; set; }

MVC3のDataAnnotationValidation属性を使用して、上記のリストの各文字列を検証するにはどうすればよいですか?

それは可能ですか?

4

1 に答える 1

1

救助のためのカスタム検証!次のことを行う必要があります。

  1. IValidatableObjectインターフェイスを実装する
  2. を実装するIEnumerable<ValidationResult> Validate(ValidationContext validationContext)
  3. ロジックを実装して、各文字列の文字数が100文字未満であることを確認します

これがコードです

public class YourModel : IValidatableObject
{
    public List<KeyValuePair<int, string>> Authors { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        foreach(KeyValuePair<int, string> myKvp in Authors)
        {
            if(myKvp.Value.Length >= 100)
            {
                yield return new ValidationResult("Must be less than 100 characters");
            }
        }
    }
}

そうすればif(Model.IsValid)、コントローラーアクションでを呼び出して、報告されたエラーを返すことができます。KeyValuePairエントリが特定のエンティティを参照している場合は、次のようなこともできます。

yield return new ValidationResult("Must be less than 100 characters", new string[] { myKvp.Key.ToString() });

ページの属性のIDに合うように調整する必要があります。このように、エラーメッセージはページの入力に固有である可能性があります。

IValidatableObjectオブジェクトの状態に応じて検証を行う場合が多いため、多くの場所でオーバーライドします。あなたのケースは少し異なりますが、上記の例からわかるように、それは確かに実行可能です。(しかし、それはすべて私の頭から離れているので、完璧ではないかもしれません!)

于 2012-08-20T09:15:44.667 に答える