2009-08-07 2 views
1

ASP.NET MVC 2 미리보기 1 프로젝트로 xVal을 설정하려고합니다. 저는 기본적으로 편지에 http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/의 예를 따르고 있습니다 (서버 쪽만, 지금까지).xVal 오류 메시지가 두 번 나타납니다

내가 여기에 블로그 게시물의 실체를 주석하고있다는 포스트 작업입니다 :

[HttpPost] 
public ActionResult Index(BlogPost b) 
{ 
    try 
    { 
     _blogService.Insert(b); 
    } 
    catch (RulesException ex) 
    { 
     ex.AddModelStateErrors(ModelState, ""); 
    } 

    return (View(b)); 
} 

그리고 여기에 서비스 방법입니다 :

public void Insert(BlogPost post) 
{ 
    var errors = DataAnnotationsValidationRunner.GetErrors(post); 
    if(errors.Any()) 
    { 
     throw new RulesException(errors); 
    } 

    _blogRepo.Insert(post); 
} 

합니다 (DataAnnotationsValidationRunner는 예를 들어, 블로그 게시물에서 그대로 유의). 완전히 잘못된 BlogPost 양식을 제출하면 유효성 검증 오류 목록이 표시됩니다.

  • 값은 필수입니다.
  • 제목을 입력하세요
  • 일부 내용을 입력하십시오 게시 된 날짜를 입력하십시오
  • 일부 내용을 입력하십시오
  • 이 게시 된 날짜를 입력 해주십시오 제목을 입력하세요

첫 번째 메시지가 무엇인지 알지 못하지만, 알 수 있듯이 다른 오류는 두 번 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 아니면 MVC V2에 문제가 있습니까? ASP.Net MVC 2 미리보기에서 시작

답변

1

1 우리는 지금 상자에서 DataAnnotation 유효성 검사 지원을받을, 그래서 문제가 ModelBinder를 로직이 실행될 때는 DataAnnotation 규칙 적용되는 것 같다 :

public ActionResult Index(BlogPost b) //Create BlogPost object and apply rules 

을 그런 다음 XVal 논리를 사용하여 다시 확인을 요청하십시오.

var errors = DataAnnotationsValidationRunner.GetErrors(post); 

이것은 동일한 순서로 반복된다는 사실로 인해 백업됩니다.

귀하의 코드가 공공 ActionResult 지수 (블로그 게시물의 B) 실행하지 않았을 것 DataAnnotation 규칙으로 MVC의 버전 1에서 잘 작동 것입니다. 새로운 DataAnnotation 로직을 끄고 XVal을 사용할 수 있다면 어디서나 읽지 않았습니다.

이이 오류가 관련된 개체에 대한 어떤 특성을 알려줍니다으로, 첫 번째 항목이 ModelState에 어떤 오류 디버그를 실행하고 체크되고 있는지 확인하려면 Scott's post able preview 1

에 이에 대한 자세한 정보를이 .

[HttpPost] 
public ActionResult Index(BlogPost b) 
{ 
    try 
    { 
     _blogService.Insert(b); //Add breakpoint here and check ModelState 
    } 
    catch (RulesException ex) 
    { 
     ex.AddModelStateErrors(ModelState, ""); 
    } 

    return (View(b)); 
} 
+0

그래, 그게 전부 야. 실제로 Annotation이 쉽게 작동 할 것이라고 생각하지 않았습니다. 어쨌든, 다른 오류는 Id 값을 개인 집합 (NHibernate POCO)을 사용하도록 설정하지 않았기 때문입니다. 매우 감사합니다! –