2013-05-01 5 views
2

MVC3에서 MVC4로 프로젝트를 업그레이드하고 유효성 검사기 중 하나가 더 이상 트리거링하지 않는 것으로 나타났습니다. 사이트 전체에서 다양한 형태로 소셜 시큐리티 번호를 캡처하는 데 사용되는 Shared/EditorTemplates 폴더의 사용자 정의 데이터 유형으로 쫓아갔습니다. (우리는 단지 정규 표현식을 설명하는 페이지가 저장 한 후로드 된 마지막 4 자리 숫자를 표시합니다.)

SSN.cshtmlMVC4의 사용자 정의 데이터 유형에 대한 정규식 유효성 검사 정의

@{ 
    var ssn = (string)ViewData.TemplateInfo.FormattedModelValue; 
    if (!String.IsNullOrWhiteSpace(ssn)){ 
     ssn = "###-##-" + Model.Substring(Model.Length - 4, 4); 
    } 
} 
@Html.TextBox("", ssn, new { @class = "text-box single-line ssn", pattern = @"^(\d{3}|###)-(\d{2}|##)-\d{4}$", placeholder = "###-##-####", title = "Expected pattern is ###-##-####" }) 

그것은 눈에 거슬리지 유효성 검사가 찾아 싶어 MVC4처럼 보인다 패턴뿐만 아니라 렌더링 된 텍스트 상자의 특성으로 데이터 - 값 - 정규식 - 패턴. 누구도 전에 이걸 봤나?

참고 : 각 모델에 항상 추가 할 필요가 없도록 사용자 지정 데이터 형식에 대한 유효성을 유지하고 싶습니다.

고마워요!

답변

1

MVC4 입력 필드에 올바른 데이터 특성을 렌더링 할 얻으려면, 나는 하이픈을 밑줄로 전달 된 익명 개체에 전달해야합니다. TextBox 도우미. 이 작업을 수행 할 때 클라이언트 측 눈에 거슬리지 유효성 검사가 여전히 작동합니까

SSN.cshtml

@{ 
    var ssn = (string)ViewData.TemplateInfo.FormattedModelValue; 
    if (!String.IsNullOrWhiteSpace(ssn) && ssn.Length == 11) 
    { 
     ssn = "###-##-" + Model.Substring(Model.Length - 4, 4); 
    } 
    else { 
     ssn = ""; 
    } 
} 
@Html.TextBox("", ssn, 
    new 
    { 
     @class = "text-box single-line ssn", 
     data_val = "true", 
     data_val_regex_pattern = @"^(\d{3}|###)-(\d{2}|##)-\d{4}$", 
     data_val_regex = "Expected pattern is ###-##-####", 
     placeholder = "###-##-####" 
    } 
) 
2

사용자 정의 유효성 검사기를 가지고 model 속성에 넣을 수 있습니다. 여기 당신이 그것을 사용하는 경우,이 속성에 내장 된 다른처럼 될 것

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(SocialSecurityAttribute), typeof(RegularExpressionAttributeAdapter)); 

을 다음과 같이 글로벌 asax.cs 응용 프로그램 시작에 등록 그런 다음 예를

public class SocialSecurityAttribute : RegularExpressionAttribute 
{ 
    public SocialSecurityAttribute() : base(@"^(\d{3}|###)-(\d{2}|##)-\d{4}$") { } 
} 

입니다

[SocialSecurity(ErrorMessage ...)] 
public string SocialSecurityNumber{get;set;} 

코드를 다시 사용할 수있는 것처럼 구현하는 것이 좋습니다. 그렇지 않으면 그냥 RegularExpressionAttribute 정규 표현식을 통과 사용할 수 있습니다

+0

: 여기와 종료 된 코드는? –

+0

그게 효과가 있지만, 나는이 데이터 형식을 사용하는 모든 모델에 추가해야합니다. 렌더링 될 때 그 데이터 속성이 입력에 추가되도록하고 싶습니다. –

관련 문제