2009-05-15 3 views
0

In the NerdDinner tutorial, Step 5, 중간 길 아래로 전체 편집 작업 방법 구현 아래 질문 단락이 :얼간이 저녁 식사 유효성 검사 규칙은

우리의 편집 구현에 대한 좋은 점은 우리의 컨트롤러 클래스와 우리의보기 템플릿도 알고있다이다는 우리의 저녁 식사 모델에 의해 시행되는 구체적인 검증 또는 비즈니스 규칙에 관한 것. 앞으로 모델에 규칙을 추가 할 수 있으며, 컨트롤러 또는 뷰를 지원하기 위해 코드를 변경할 필요가 없습니다. 이를 통해 최소한의 코드 변경만으로 향후 애플리케이션 요구 사항을 쉽게 개발할 수있는 유연성을 확보 할 수 있습니다.

제 질문은 어떤 규칙을 추가하여 깨끗한 분리를 잃지 않도록 할 수 있는지입니다. 내가 특정 클래스/모델 정보가없는 응용 프로그램을 통해 사용할 수 있기 때문에

catch { 
    foreach (var issue in dinner.GetRuleViolations()) { 
     ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
    } 

    return View(dinner); 
} 

:

public static class ControllerHelpers { 

    public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors) { 

     foreach (RuleViolation issue in errors) { 
      modelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
     } 
    } 
} 

이 코드보다 낫다 : 나는이 코드를 볼 수 있습니다. 위와 같이 오류 처리가 간단하다면 어떻게 좋을지 알 수 있습니다.하지만 새로운 비즈니스 규칙에 대해 더 복잡한 것을 추가하는 방법을 모르며 예제를 원하고 있습니다.

답변

0

먼저 게시 한 코드가 실제로 모델에서 오류를 "가져 와서"View에 배치하는 것을 이해합니다 (ModelState를 통해). 유연성은 새로운 규칙/수정 사항이 모델을 터치하기 만하면된다는 사실에 있습니다. 즉 Dinner.cs 코드 만 누르면됩니다.

NerdDinner 레슨에서 grok해야 할 한 가지는 UpdateModel() 호출에서 Dinner.cs OnValidate() 부분 메서드와 DinnersController.cs에서 유효성 검사가 수행된다는 것입니다. 이 호출은 화면의 텍스트를 모델로 복사합니다. 예를 들어, 텍스트를 float로 복사하려고하면 ModelState를 업데이트하고 오류가 발생합니다. 정상적인 유효성 검증은 실행되지 않습니다.

+0

답변 해 주셔서 감사합니다. – johnny

관련 문제