2011-11-04 3 views
3

두 필드에 걸쳐있는 전화 번호의 유효성을 검사하려고합니다.MVC3 단일 필드로 여러 필드 유효성 검사

첫 번째 필드에는 지역 번호가 표시되고 다른 필드에는 나머지 전화 번호가 표시됩니다.

요구 사항은 다음과 같습니다 그들은 둘 필요

  1. .
  2. 숫자 여야합니다.
  3. 지역 번호 필드는 최대 6 자리 여야하며 전화 번호 필드는 최대 10 자리 여야합니다.

두 필드 모두에 하나의 메시지가 표시되어야합니다. 예를 들어, 지역 번호가 누락되었지만 전화 번호가 제공된 경우 두 개의 필드가 모두 "전화 번호를 입력하십시오."라고 표시된 후에 단일 메시지가 표시되어야합니다..

public class Customer 
{ 
    //...other fields here 

    public string AreaCode { get; set; } 

    public string PhoneNumber { get; set; } 
} 

나는 정규 표현식 또는 simlar 단일 필드로 전화를 구현할 수 없습니다 :에

나는 현재이 모델은 유사하다.

에 비슷한 질문이 있습니다이 here (그리고 또한 가지 유사한 here에) 대답은 속성에서 요구되는 필드의 이름을 지정합니다 (MultiFieldRequired라는 이름의이 경우) 사용자 정의 유효성 검사 속성을 만드는 것이 좋습니다 곳 . 그런 다음 유효성 검사 속성은 리플렉션을 사용하여 오류가있을 경우보고 할 다른 속성 값을 확인합니다.

예를 들어, 위의 모델의 경우 내가해야한다고 생각 :

public class Customer 
{ 
    //...other fields here 

    public string AreaCode { get; set; } 

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")] 
    public string PhoneNumber { get; set; } 
} 

는 그러나, 나는 제공된 솔루션과 함께 작은 문제 건너왔다. 사용자 지정 유효성 검사 특성에 의해 반환 된 오류는 데이터 주석이있는 필드 (PhoneNumber는 위의 모델 임)에 대해서만보고됩니다. 따라서 AreaCode가 사용자에 의해 입력되지는 않았지만 PhoneNumber가 제공되면 오류는 AreaCode가 아닌 PhoneNumber 필드에 대해보고됩니다. 또한 Visual Studio 인터넷 프로젝트와 함께 제공된 css를 사용하는 경우 제공된 PhoneNumber 필드가 빨간색으로 표시되고 유효하지 않은 지역 코드는 흰색 (오류 표시 안 됨)으로 표시되므로 약간 이상하게 보입니다.

누구나이 색상 표시 동작을 교정하는 방법이나 필드가 잘못되면 (필드에 올바른 색상으로 표시) 오류 메시지를보고 할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

3

둘 모두에 특성을 적용하고 하나의 ValidationMessageFor (anyone) 만 있고 메시지를 표시 할 위치에 놓습니다 (게시물에서 하나의 오류 메시지 만 표시하려는 것 같습니다).

public class Customer 
{ 
    //...other fields here 

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")] 
    public string AreaCode { get; set; } 

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")] 
    public string PhoneNumber { get; set; } 
} 

보기 나는이 올바른지 확실히 모르겠어요

<div class="editor-label"> 
     @Html.LabelFor(model => model.AreaCode) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.AreaCode) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.PhoneNumber) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.PhoneNumber) 
     @Html.ValidationMessageFor(model => model.PhoneNumber) 
    </div> 
+1

구현 예가 여기서 어떻게 작동하는지 잘 모르겠습니다. 이 작업을 수행 할 수있는 유일한 방법은 '[MultiFieldRequired (새 문자열 [3] { "Phone1", "Phone2", "Phone3"}, ErrorMessage = "Phone # required와 같은 속성 중 하나 위에 속성을 추가하는 것입니다. ")]'------ 코드는 배열 만 받아 들인다. 사람들이 쉼표로 구분 된 문자열을 사용하고 작동하는 방식을 잘 모르겠습니다. – ganjeii

+0

나는 동의하고, 문법을 컴파일하지 못하게하고 간제가 옳다. – Gaurav123

1
[MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")] 
public class Customer 
{ 
    //...other fields here 

    public string AreaCode { get; set; } 

    public string PhoneNumber { get; set; } 
} 

하나의 속성이 아닌 여러 개의 필수 입력란을 클래스에 추가해야합니다. 구현을 보면, 전달 된 객체를보고 속성을 반복합니다.

+0

? Scotts 위의 텍스트를 보면 "모델 레벨 대신 속성 레벨에서 구현할 수 있습니다 ..."라고 대답합니다. 또한, 내가 제공 한 두 번째 (비슷 함) 예제에서 Darin Dimitrov는 속성 수준 (전자 메일 속성 위에 있음)에서 사용 된 특성의 예제를 제공했습니다. 두 답변 모두 속성을 반복하지만, 오류는 모델 수준이 아닌 속성 수준에서보고되도록 고안되었습니다. – Dangerous

+0

@Dangerous Darin의 예가 더 좋습니다. 조금 더 살펴 보겠습니다. 하지만 다른 속성에 영향을 줄 때 단일 속성에서 정의하려는 이유를 이해할 수 없습니다. –

+0

고맙겠지 만 속성 (또는이 경우 속성 그룹)에 대해 오류를보고하기 위해 모델 수준에서 유효성 검사를 정의하고 싶지 않았습니다. 두 개의 전화 번호 필드 오른쪽 (또는 아래)에 오류 메시지가 나타나기를 원했습니다. 이 모델에 대한 다른 전화 번호 필드도 있으므로 모델 수준 유효성 검사를 사용하여 속성에 대한 오류를보고하기는 어렵습니다. 나는 jquery가 이런 방식으로 사용자 유효성 검사를위한 속성 그룹을 정의 할 수 있다고 믿는다. 그러나 이것은 사용자 정의 데이터 주석을 정의하지 않고 mvc3 데이터 주석과 함께 할 수 없다. – Dangerous