1

IValidatlableObject を実装するモデルがあるため、Validate メソッドによるカスタム エラー チェックを行います。

オブジェクトを作成するときは問題ありませんが、そのオブジェクトを編集しようとすると、そのカスタム検証を行いたくありません。

検証を行わないために Validate メソッドを呼び出しているアクションをどのように知ることができますか?

更新: これは mi モデルです:

public class Ingredient : IValidatableObject
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Required!!")]
    public string Name { get; set; }

    public virtual List<Product> Products { get; set; }

    public Ingredient()
    {
        Products = new List<Product>();
    }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        using (var uow = new UnitOfWork())
        {
            var ingredient = uow.IngredientRepository.Get(i => i.Name ==Name).FirstOrDefault();

            if (ingredient != null)
                yield return new ValidationResult("Duplicate!!!.", new[] { "Name" });
        }


    }
}

}

したがって、成分を作成するときはすべて(属性+ IValidatable)を検証したいのですが、成分を編集するときは属性のみを検証したい(つまり、IValidatableをスキップすることを意味します)IValidatableメソッド内で、私がどこから来たのかを知る方法Validate を呼び出しますか?

ありがとう!!!

4

3 に答える 3

2

モデルの主キーを確認してください - null でないかどうか:)

于 2012-03-12T20:10:52.397 に答える
1

ここでより「MVCっぽい」正しい方法は、実際には2つのクラスがあり、1つはCreateメソッド用で、もう1つは編集用です。共有された検証のために基本クラスを呼び出すことができますが、共有されていないものはここではチェックされません。

于 2012-03-12T20:34:19.957 に答える
0

オブジェクトを検証したくない場合は、Model.IsValid(またはValidate()、明示的に実行している場合は ) を呼び出さないでください。問題の詳細を知らなければ、それ以上の回答はできません。

于 2012-03-12T20:11:24.003 に答える