モデルに次のプロパティがあります。
[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)]
public List<KeyValuePair<int, string>> Authors { get; set; }
MVC3のDataAnnotationValidation属性を使用して、上記のリストの各文字列を検証するにはどうすればよいですか?
それは可能ですか?
モデルに次のプロパティがあります。
[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)]
public List<KeyValuePair<int, string>> Authors { get; set; }
MVC3のDataAnnotationValidation属性を使用して、上記のリストの各文字列を検証するにはどうすればよいですか?
それは可能ですか?
救助のためのカスタム検証!次のことを行う必要があります。
IValidatableObject
インターフェイスを実装するIEnumerable<ValidationResult> Validate(ValidationContext validationContext)
これがコードです
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
オブジェクトの状態に応じて検証を行う場合が多いため、多くの場所でオーバーライドします。あなたのケースは少し異なりますが、上記の例からわかるように、それは確かに実行可能です。(しかし、それはすべて私の頭から離れているので、完璧ではないかもしれません!)