2013-01-21 2 views
0

지금은 그냥 일반 표시입니다.FluentValidation에서 내 맞춤 메시지를 표시하려면 어떻게해야합니까?

'이니셜'은 비워서는 안됩니다. 다음과 같은 규칙에 대한

메시지 :

context.RulesFor(p => p.Initials).Required(p => p.Message("Initials are frikking required.")).Length(0, 8); 

이니셜의 인적 또는 심지어 표시 이름 특성이없는, public string Initials { get; set; }로 그냥 일반 유형 ApplicantProfileModel : MappedViewModel<ApplicantProfile>의 다소 큰 모델에 선언되어있다, 그러나 나는 같은 문제가 표시 이름을 추가 할 때도 마찬가지입니다.

뷰 모델에 남아있는 속성이 Required입니다.

컨트롤러 액션 코드는 다음과 같습니다

[HttpGet] 
public ActionResult Create() 
{ 
    var applicant = _applicantService.BuildApplicantProfile(); 
    var model = new ApplicantProfileModel(); 
    model.MapFromEntity(applicant); 
    return View(model); 
} 

이 내 마지막 많은 프로젝트에 대한 내 표준 코드이며, 모든 것이 FluentValidation의 사용자 정의 메시지를 제외하고 작동합니다. 그들의 유효성 검사는 훌륭합니다.

<li class="form-line"> 
    @Html.LabelFor(m => m.Initials) 
    @Html.EditorFor(m => m.Initials) 
    @Html.ValidationMessageFor(m => m.Initials) 
</li> 

내가뿐만 아니라 TextBoxFor을 시도했지만 아무런 차이 :

뷰는 없다.

+0

코드가 정상적으로 보입니다. 'Initials' 속성의 유형은 무엇입니까? 여기에 설명 된 문제를 재현 할 수있는 전체 예제 (모델, 뷰 및 컨트롤러 포함)를 보여줄 수 있습니까? –

답변

0

속성에 [Required] DataAnnotation 속성을 남겨 두셨습니까? 나는 그들이 남아있는 경우 내 사용자 정의 유효성 검사 규칙 대신 표시되는 것을 발견했습니다.

EDIT : 이것은 유효성 검사기를 이전에 설정 한 방법입니다. 이 아니라 HttpPost이 아니므로 유효성 검사기를 수동으로 호출해야합니다.

public class ApplicantProfileModelValidator : AbstractValidator<ApplicantProfileModel> 
{ 
    public ApplicantProfileModelValidator() 
    { 
     RuleFor(r => r.Initials) 
      .NotEmpty() 
      .WithMessage("Initials are frikking required."); 
    } 
} 
+0

아니, 그 모델의 어느 곳에서나 '필수'는 아니다. 내가 Fluent on에 매는 첫 번째 모델입니다. – ProfK

+0

유효성 검사기의 전체 코드를 표시 할 수 있습니까?당신이 대답을 – levelnis

0

나는 두 개의 다른, 그러나 매우 유사한 발색 라이브러리를 섞어 놓았다. 처음에는 ASP.NET MVC fluent validation framework으로 시작했거나 NuGet에 FluentMVC으로 알려졌습니다. 이렇게하려면 모델에 InitializeModel(ModelContext<TModel> context)이라는 메소드를 구현해야합니다.이 메소드에는 다양한 속성 (예 : 당신의 검증 모델에 IModelInitializer<TModel> 인터페이스를 구현하도록 지시하지만, 내가하지이기 때문에

context.RulesFor(p => p.Id).Required(p => p.Message("Id is missing. Message may have been tampered with.").StopOnFail()); 

는 검증 엔진은 어떻게 든, 모든 모델에이 메소드를 호출합니다. 이것은 규칙이 등록되고 있다고 말하는 것은 아니지만이 라이브러리의 일부는 활성화되어 사용하려는 라이브러리와 상호 작용합니다. FluentValidation,은 NuGet에서 FluentValidation, FluentValidation.MVC3 및 FluentValidation.MVC4로 알려져 있습니다.

내 모델에서 InitializeModel 메도우를 올리면 모든 것이 작동하는 것처럼 보입니다. 검증을위한 내 무례한 테스트 메시지가 표시되므로 과거 테스트 및 릴리스 관리자를 몰래 빠져들지 않습니다.

+0

으로 표시하는 것을 잊지 마세요. – Mutmatt

관련 문제