ASP.NET MVC+FluentValidation+PartialView>클라이언트 측 검증
-
21-12-2019 - |
문제
내가 사용하는 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
에서 만들어진 모델하고 거기에서 어딘가에 그것을 시작하는 사용 IndexViewModel
대 PersonalInfoViewModel
에 대한 메타데이터를 가져와 클라이언트 측면 유효성 검사:
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.확실히 아름다운이지만,그것은 작동하고 내가 갈 수 있으로 작동합니다.만약 누군가는,더 나은 솔루션을 나는 매우 행복을 위해 노력하고 있습니다.