2009-08-31 8 views
2

MVC C# 응용 프로그램 내에서 데이터의 유효성을 검사하는 가장 좋은 방법을 알아 내려고 노력 중이며 xVal이 가장 적합하다고 보입니다. 그러나 데이터 형식 유효성 검사에 문제가 있습니다.xVal을 사용하여 데이터 유형 유효성 검사

처음에는 DTO에서 UpdateModel을 수행하고 DTO에서 유효성 검사를 실행했습니다. 예를 들어, 문자열 ("asd")을 십진수 필드에 매핑하려고하면 UpdateModel에서 예외가 발생합니다. 유효성을 검사 할 데이터가 있기 전에 UpdateModel이 실행되어야했기 때문에이를 해결하는 방법을 알지 못했습니다.

내 솔루션은 UpdateModel에서 복사 할 DTO를 만들고 해당 DTO에 대한 유효성 검사를 실행 한 다음 값을 적절한 DTO로 복사하는 것이 었습니다. 양식 DTO의 모든 속성은 문자열이므로 UpdateModel은 절대 폭탄을 내지 않으며 xVal을 통해 데이터 유효성 검사를 시행합니다. 그러나 요구 사항과 같은 규칙이 실행되는 동안 DataType 규칙을 가져올 수 없습니다 (이 경우 DataType.Currency 시도).

클라이언트 쪽 유효성 검사를 작동 시키려고했지만 데이터 형식의 서버 쪽 유효성 검사를 수행 할 수있는 확실한 방법이 있었으면합니다.

서버 측에서 데이터 유형의 유효성 검사와 관련하여 다른 사람들이 한 일은 무엇입니까?

+0

DTO를 통해 사용자 정의 ViewModel을 의미합니까? –

답변

2

내가 끝낸 것은 양식을 나타내는 일부 DTO를 만드는 것이 었습니다. 이러한 DTO는 Request.Form을 가져 와서 모든 양식 값을 양식 값과 동일한 이름 인 내부 특성 (예 : 공개 문자열 전자 메일, 공용 문자열 firstname)으로 자동 매핑합니다.

그들은 모든 문자열 속성을 가지며 xVal 특성을 지정합니다. 그런 다음 xVal과 정규 표현식을 사용하여 들어오는 데이터가 유효한지 확인합니다 (예 : 유효한 날짜, 전자 메일, 숫자 등). 이 방법은 항상 문자열로 들어가기 때문에 예외가 던져지지 않을 것입니다. 닷넷을 데이트 또는 다른 것으로 구문 분석하려고하는 것과는 대조적입니다.

이것은 데이터가 항상 내가 원하는 유효성 검사를 실행할 수있는 xVal로 만들어 졌는지 확인하고 다음은 올바른 데이터를 알고있는 경우 DateTime과 같은 적절한 유형으로 변환합니다.

1

문자열에서 다른 데이터 형식으로 서버 쪽에서 구문 분석해야하는 데이터 유효성 검사를 위해 ValidationAttribute에서 파생 된 사용자 지정 유효성 검사기를 사용하고 있습니다. 예를 들어 :

public class DateAttribute : ValidationAttribute 
    { 

     public override bool IsValid(object value) 
     { 
      var date = (string)value; 
      DateTime result; 
      return DateTime.TryParse(date, out result); 
     } 
    } 

나는 또한 검증 자바 스크립트 코드 사용자 정의를 작성하지 않고 속성을 클라이언트 측 및 서버 측 유효성 검사에 속성을 설정하는 방법을 발견했습니다. 다른 유효성 검사 특성 기본 클래스에서 파생되면됩니다. 이에 대해 더 자세히 알고 싶다면 내 blog article about client-side validation을보십시오.

+0

유효성 검사는 문제가 아니며 유효성 검사를 받기 전에 저장해야합니다. 이상적으로는 뷰 모델을 필요로하지 않고 DTO에 복사하는 것이 좋을 것입니다. 통화 필드는 소수점으로 갈 것입니다. 그러나 이것은 int 필드에 문자열을 입력하려고하면 중단되고 UpdateModel을 사용하여 필드는 양식을 뷰 모델 또는 DTO로 구성합니다. – Parrots