문제

내가 사용하는 FluentValidation 사 ASP.NET MVC5.1viewmodels(기본값을 사용하여 눈에 띄지 않는 클라이언트 측면 유효성 검사).등록을 만들/나의 검증을 통해 Ninject(no 특성에 viewmodels):

FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new NinjectValidatorFactory(_kernel));
AssemblyScanner.FindValidatorsInAssembly(Assembly.GetExecutingAssembly()).ForEach(match => _kernel.Bind(match.InterfaceType).To(match.ValidatorType));

나는 부분보기 자주 사용되는 응용 프로그램을 통해.이 부분의 뷰 모델."주"시점(하나를 위한 전체 보기)만 상속에서는 이"부분적인"뷰 모델.

public class IndexViewModel : PersonalInfoViewModel { ... }

동일한 패턴에 사용되는 검사기:

public class IndexValidator : PersonalInfoValidator { ... }

이 잘 작동하고 서버의 측면 유효성 검사 작품뿐만 아니라 클라이언트 측면 유효성 검증에서는"기본"보기입니다.그러나 클라이언트 측면 유효성 검사에 이 부분 뷰가 트리거되지 않습(없음 data-val-* 특성에 입력 필드가).

나의"기본"보기 Index.cshtml

@model IndexViewModel
@Html.TextBoxFor(x => x.SomeProperty) // client-side validation works fine

@Html.Partial("PersonalInfo") // client-side validation in the partial view does not work (see below)

나의 부분보기 PersonalInfo.cshtml:

@model PersonalInfoViewModel
@Html.TextBoxFor(x => x.FirstName) // client-side validation does not work

는 것으로 나타났을 때 그것이 작동 변경하는 모델에 대한 부분적인 보기를"주"뷰 모델:

@model IndexViewModel
@Html.TextBoxFor(x => x.FirstName) // client-side validation works

그래서 내가 어딘가에 건축할 때 클라이언트 측면 유효성 검사가 올바른 검증되지 않고 아무 data-val-* 특성으로 주입된 HTML.하지만 그럴 수 없 변경된 뷰 모델에서의 부분보기 때문에,사용되는 몇 가지 서로 다른 페이지를 다른"기본"보기(모두에서 상속 PersonalInfoViewModel 도).

에 대한 아이디어를 얻는 방법을 내는 클라이언트 측면 유효성 검증 작업을 이 경우에는?

업데이트

의 몇 시간 후 파기 ASP.NET WebStack 원,내가 찾은 문제가 발생하는 것에 TextBoxFor 방법입니다.가 ModelMetaData 에서 만들어진 모델하고 거기에서 어딘가에 그것을 시작하는 사용 IndexViewModelPersonalInfoViewModel 에 대한 메타데이터를 가져와 클라이언트 측면 유효성 검사:

ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
Html.GetUnobtrusiveValidationAttributes("FirstName", metadata); // no client-side validation attributes found

그러나 이 생성하는 올바른 클라이언트 측면 유효성 검사에 속하지 않는 경우는 메타데이터를 지정하는 명시적으로:

Html.GetUnobtrusiveValidationAttributes("FirstName");

불행하게도,내가 발견되지 않았는 방법을 사용하여 이 지식에 대한 내용까지.

도움이 되었습니까?

해결책

지 않았을 찾을 수있는 좋은 솔루션을 내고 싶지 않았으로 ASP.NET WebStack 원 이상,그래서 내가 정착으로 추한 해결 방법:

나는"수동으로"주입 없 data-val-* 속성을 렌더링할 때 필드를 입력은 다음과 같습니다.

@Html.TextBoxFor(x => x.FirstName, Html.GetUnobtrusiveValidationAttributes("FirstName"))

GetUnobtrusiveValidationAttributes (라는 독립)빌드의 올바른 HTML 특성을 나는 그냥 그들을 추가 그것을 TextBox.확실히 아름다운이지만,그것은 작동하고 내가 갈 수 있으로 작동합니다.만약 누군가는,더 나은 솔루션을 나는 매우 행복을 위해 노력하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top