문제

ASP.NET MVC 프레임 워크에서 엔티티를 검증하기위한 프레임 워크로 XVal을 평가했습니다. 나는 최근에 검증 규칙이 깨질 때마다 xval이 발굴을 일으킨다는 것을 발견했습니다. 나에게 틀린 것 같다. 예를 들어, 사용자가 양식을 채우고 3 개의 필수 필드를 채우는 것을 잊어 버리면 세 가지 예외가 발생됩니다. 이것이 좋은 연습입니까? ( 편집하다: 나는 또한 이것을 읽었습니다. 그래서 나는 그것이 좋은 연습이 아니라고 생각합니다)

XVal 사용 경험은 무엇입니까? 예외를 던지지 않는 대체 검증 프레임 워크가 있습니까?

감사

(PS : 많은 사람들이 이것을 읽고 있다는 것을 알았습니다. 유창한 검증을 사용하고 있습니다 지금)

도움이 되었습니까?

다른 팁

아니오는 심각하게 잘못되지 않았기 때문에 간단한 메시지 대신 예외를 보여주는 것이 좋지 않습니다 ... 대신 채워야합니다. ModelState 이러한 오류로 사용하여 양식에 표시합니다.

Html.ValidationMessage("EntityPropertyName");

XVal은이 모든 것을 지원합니다. 양식이 다시 게시되기 전에 클라이언트 측에서 검증 할뿐만 아니라.

일부 코드

설정할 때 DataAnnotations 엔티티 클래스 (또는 메타 데이터 동반자 클래스)에 대한 속성이 가장 유사한 () 메소드를 구현할 가능성이 높습니다. 가장 좋은 방법은 자동 생성되는 T4를 사용하는 것입니다. 따라서 동일한 코드를 반복해서 반복 할 필요가 없습니다 ...

public IEnumerable<ErrorInfo> Validate()
{
    IList<ErrorInfo> errors = DataAnnotationsValidationRunner.GetErrors(this).ToList<ErrorInfo>();
    return errors.AsEnumerable();
}

그런 다음해야 할 일은 다음과 같습니다.

IEnumerable<ErrorInfo> errors = entityObjectInstance.Validate();
if (errors.Any())
{
    new RulesException(errors).AddModelStateErrors(filterContext.Controller.ViewData.ModelState, entityPropertyName);
}

이를 더욱 자동화하기 위해 액션 필터에서이를 구현할 수 있으므로 컨트롤러 작업으로 전달되는 엔티티 객체에 대한 유효성 검사가 자동으로 이루어집니다. 컨트롤러 동작은 단지 여부 만 확인하면됩니다 ModelState.IsValid() 그 다음에.

여기에서 필요한 수업은 더 필요합니다 (웹에서 가져온 것) :

public static class DataAnnotationsValidationRunner
{
    public static IEnumerable<ErrorInfo> GetErrors(object instance)
    {
        var metadataAttribute = instance.GetType().GetCustomAttributes(typeof(MetadataTypeAttribute), true).OfType<MetadataTypeAttribute>().FirstOrDefault();
        var metaClass = metadataAttribute != null ? metadataAttribute.MetadataClassType : instance.GetType();
        var metaClassProperties = TypeDescriptor.GetProperties(metaClass).Cast<PropertyDescriptor>();
        var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType()).Cast<PropertyDescriptor>();

        return from metaProp in metaClassProperties
               join modelProp in modelClassProperties on metaProp.Name equals modelProp.Name
               from attribute in metaProp.Attributes.OfType<ValidationAttribute>()
               where !attribute.IsValid(modelProp.GetValue(instance))
               select new ErrorInfo(metaProp.Name, attribute.FormatErrorMessage(string.Empty), instance);
    }
}

MVC 2

ASP.NET MVC 2 베타 2의 유효성 검사는 XVAL과 유사합니다. 따라서 프로젝트에 너무 멀지 않고 사용을 고려할 수 있다면 개발 진행 상황에서 코드 당신의 기초로서, 아마도 그것은 당신을 위해가는 길 일 것입니다.

xval이 훌륭하다고 생각합니다. 성 검증 자 그리고 그것은 완벽하게 작동합니다. 유효성 검사를 실행할 때마다 규칙 검색을 잡고 Modelstate에 오류를 추가하십시오 (예 :

try
{
  // execute validation runner
}
catch (RulesException ex)
{
   ex.AddModelStateErrors(ModelState, "prefix");
}

ASP.NET MVC V2는 자체를 소개합니다 검증 프레임 워크.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top