2012-03-12 3 views
0

IValidatlableObject를 구현하는 모델이 있으므로 Validate 메서드를 통해 사용자 지정 오류를 검사합니다.일부 작업에서만 IValidatableObject

개체를 모두 만들면 문제가되지 않지만 개체를 ​​편집하려고하면 해당 사용자 지정 유효성 검사를 수행하지 않습니다.

유효성 검사를 수행하지 않기 위해 Validate 메서드를 호출하는 동작을 어떻게 알 수 있습니까?

업데이트 : 내가 성분을 만들 때 그래서 나는 모든을 (+ IValidatable 속성) 을 확인하고 싶지만 내가 Ingrendient를 편집 할 때 난 단지 원하는

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을 건너 뛰는 것을 의미한다) Validate를 호출하는 곳에서 IValidatable 메서드 내에서 알아야 할 방법은 무엇입니까?

감사합니다 !!! 모델의

답변

2

체크 기본 키 -이 널 (null) : 당신이 객체의 유효성을 검사하지 않으려면 명시 적으로 그 일을하는 경우

+0

나는 생각하지 않았습니다. 그렇습니다. 좋은 해결책 !!!. 그래서 나는 액션/컨트롤러를 확인하는 방법이 없다고 생각합니다. – Tekno

0

는, Model.IsValid (또는 Validate()를 호출하지 않는 여부 수 있습니다. 귀하의 문제에 대한 자세한 내용을 알지 못하면서 그 이상으로 대답하지 않습니다.

1

실제로 "MVCish"올바른 방법은 실제로 두 개의 클래스가 있습니다. 하나는 편집을위한 Create 메서드이고, 하나는 기본 호출을 호출 할 수 있습니다 어떤 공유 유효성 검사를위한 클래스라도 공유되지 않은 것은 여기에서 확인되지 않습니다.

+0

하지만 약간 추할 것입니다! 검증을 위해서만 두 개의 동일한 클래스. 별로 건조하지 않고 manteinable하지 않습니다. 나는 이것이 당신이 순수한 MVC 또는 더 적은 MVC 중 하나를 선택해야 할 때라고 생각하지만, 유지하기가 더 쉽다. – Tekno

+0

이것은 DRY에 위배되지 않는다. DRY는 뷰 복제가 아닌 논리적 복제에 적용됩니다. 이것은 MVC 표준입니다. ViewModel에서이 점에 대해 염려하는 독자라면, 두 가지 모두 공유 소품 용 단일 소스에서 물려받은 것입니다. 여기에 실제로 저장하고있는 것이 무엇인지 물어보십시오. 메소드를 만들고 편집하여 두 가지 용도로 사용하면 앱이 더 복잡해지고 더 복잡한 뷰를 얻을 수 있습니다. 모델이 도움이 될 수 있습니다. –

관련 문제