IValidatableObjectによってのみ
-
12-12-2019 - |
質問
IValidatLableObjectを実装するモデルを持っているので、検証方法を介してカスタムエラーがチェックされます。
オブジェクトを作成するときはすべて大丈夫ですが、そのオブジェクトを編集しようとすると、そのカスタム検証を行いません。
WICH Actionからどうやって知ることができますか私は検証を行うために検証方法を呼び出すことができますか?
更新: これは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" });
}
}
}
.
}
だから私がすべての成分を作成したいとき(属性+ yivalidatable) しかし、Ingrendientを編集すると、属性を検証したいだけです(Skip Ivalidatableをスキップすることを意味する) InvalyDatableメソッドの内部で、私が検証しているところから、任意の方法を知る方法は?
ありがとう!!!
解決
モデルの主キーを確認する - NULLでもないかどうか:)
他のヒント
ここでの正しい方法は、実際には2つのクラスがあります.1つは編集用のCREATEメソッド1つです。共有検証の基本クラスにオフにすることができます。その場合、共有されていないものはここではチェックされません。
オブジェクトを検証したくない場合は、Model.IsValid
(または明示的にしている場合はValidate()
)を呼び出しません。問題に関する詳細を知らずにそれ以上に答えることはできません。
所属していません StackOverflow