2009-06-11 6 views
2

유효성 검사 및 asp.net mvc와 관련하여 많은 기사를 읽었으며 대다수는 모델의 유효성 검사를 가리키는 경향이 있습니다. 모든 사람들이 보는 문제는 그들이 다른 시나리오를 다루지 않는다는 것입니다. 또는 적어도 그들이 달성 할 수있는 방법을 보여주지는 못합니다.부분 유효성 검사 ASP.NET MVC

사용자 계정을 만들거나 업데이트 할 때 이메일 주소는 이메일 확인 입력과 일치해야합니다. 이 전자 메일 확인 입력은 순수한 사용자 입력을 돕는 모델의 일부가 아니며 가상 속성이라고 할 수 있습니다. 사용자가 자신의 전자 메일 주소를 사용하여 로그인 할 때 유효성 검사는 전자 메일을 확인 입력과 비교하려고 시도해서는 안되지만, 본 모든 예에서 동일한 데이터의 유효성을 검사하는 시나리오를 구분할 수있는 방법이 없습니다. 다른 방법.

누구든지 위의 문제 유형을 처리하는 mvc 유효성 검사 문서를 가리킬 수 있습니까? 아니면이 같은 유효성 검사를 처리하는 모범 사례에 대한 조언이있는 사람이 있습니까?

작성, 읽기, 업데이트, 삭제와 같은 "유효성 검사 작업"을 도입하려고 생각한 다음 사용 된 컨텍스트에 따라 동일한 데이터 비트의 유효성을 검사 할 수있었습니다. 아무도 이런 방식으로 일을하는 것에 대한 생각이 없습니까? 내가 모델에서 분리 검사기를 사용하고 왜 어떤 도움

답변

2

이 사전에

덕분이다. 그래서, IValidator와 다른 유효성 검사기를 가지고 있습니다. 인스턴스 유효성 검사기의 경우 DI 컨테이너 (예 : StructureMap)를 사용합니다. 여기

그것은 (안 나에 의해) 기술되었다 : Issues with my MVC repository pattern and StructureMap

1

내 경험에 따르면

1과 같은 예를 들어,이 튜토리얼에서 보여 검사기는 별도의 서비스 층으로 컨트롤러에서 분리해야합니다 http://www.asp.net/learn/mvc/tutorial-38-cs.aspx

2. 서비스 방법은 모든 종류의 유효성 검사를 캡슐화 할 수 있습니다. 예 :

public bool PlaceBooking(Booking booking) 
    { 
     //Model validation 
     IEnumerable<ErrorInfo> errors = DataAnnotationsValidationRunner.GetErrors(booking); 
     if (errors.Any()) 
      _validationDictionary.AddErrors("error", errors); 

     // Business rule: Can't place bookings on Sundays 
     if(booking.ArrivalDate.DayOfWeek == DayOfWeek.Sunday) 
     _validationDictionary.AddError("ArrivalDate", "Bookings are not permitted on Sundays"); 

     if (!_validationDictionary.IsValid) return false; 

     //Errors comming from Data Access Layer 
     try 
     { 
     return _dao.Save(booking); 
     } 
     catch (DBExecutionException ex) 
     { 
     if (ex.ResultCode == ResultCodes.RES_UNIQUEINDEX) 
      _validationDictionary.AddError("error", "Booking already exists."); 
     else 
      _validationDictionary.AddError("error", "Some other DB issue happens."); 
     } 
     return false; 
    } 
관련 문제