2016-06-24 5 views
-1

전화 번호 필드를 최대 10 자리까지 입력하고 싶습니다. [stringlength] 속성을 배치했지만 원하는 결과를 얻을 수 없습니다. 나를 도울 수있는 사람들에게 감사합니다.전화 번호의 길이 제한

부수적으로 지역 번호와 나머지 자릿수가 저장된 프로 시저를 통해 db에 개별적으로 전송되도록 전화 번호를 분리 할 수 ​​있습니까?

모델 :

public class Pharmacy 
{ 
    [StringLength(10,MinimumLength=10)] 
    public string PhoneNumber 
    { 
     get 
     { 
      return _phoneNumber; 
     } 
     set 
     { 
      Regex regexObj = new Regex(@"[^\d]"); 
      _phoneNumber = regexObj.Replace(value, ""); 
      _phoneNumber = Regex.Replace(_phoneNumber, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3"); 
     } 
    } 
} 

양식 필드 :

<label id="lblPhoneNumber">Phone Number</label>      
<input style="margin: 5px; " type=text name="txtPhoneNumber" id="txtPhoneNumber" value="@Model.Pharmacy.PhoneNumber" /> 
+3

당신이 대신 MaximumLength''의 주석에'MinimumLength'을 사용하고 있는지 깨닫게합니까? –

+0

@ 배리, 내 실수. 나는 그것을 제거하고 MaximumLength로 바꿨지 만 "MaximumLength는 유효한 명명 된 속성 인수가 아닙니다"라는 빨간색 선이 생깁니다. – julianc

답변

1

왜 당신이 ASP.NET MVC를 사용하는 경우 입력을위한 HTML 태그를 사용하고 있습니까? Razor 태그를 사용해야합니다.

@Html.LabelFor(model => model.PhoneNumber, new { id = "lblPhoneNumber" }) 
@Html.TextBoxFor(model => model.PhoneNumber, new { id = "txtPhoneNumber", style="margin: 5px;", name="txtPhoneNumber", @Value = Model.Pharmacy.PhoneNumber }) 
@Html.ValidationFor(model => model.PhoneNumber, "", new { @class = "text-danger" }) 

또한, 당신은 확인을 위해 unobtrusiveJS NuGet UnobtrusiveJS 있는지 확인하십시오. 다른 모든 것은 데이터 주석으로 잘 보인다. 이름이 지정되지 않은 매개 변수 [StringLength]은 최대 길이이며 최소 길이는 지정해야합니다. 또한 사용자가 오류에 대해 알려 할 수 있습니다, 그래서 당신은 질문 보조 노트에

의 두 번째 부분에 대한 오류 메시지뿐만 아니라 [StringLength(10, MinimumLength=10, ErrorMessage="* Must be 10 digits")]

이 필요합니다, 그것은 할 수 있습니다 지역 번호와 나머지 자릿수가 저장된 proc를 통해 db에 개별적으로 전송되도록 전화 번호를 분리하십시오.

예, 이미 수행하고있는 RegEx 캡처 그룹을 사용하십시오.

RegEx regEx = new Regex(@"(\d{3})(\d{3})(\d{4})") 
Matches matches = regex.Matches(value); 
// matches[0] contains area code 
// matches[1] contains first 3 digits 
// matches[2] contains final 4 digits 

MSDN - Regex.Matches

+0

이 방법으로 설계 한 사람으로부터이 프로젝트를 시작했습니다. 이 필드는 db에서 데이터를 읽습니다. 사용자가이 데이터를 편집하기로 결정하면 10 자리 만 입력 할 수 있습니다. 오류 메시지에 대해 감사드립니다. – julianc

+1

확인. unobtrusiveJS의 유효성 검사없이보기에서이 작업을 수행해야하는 경우 jQuery를 사용하여'.change()'함수를 사용하여이를 수행하십시오. 또한 데이터가 뷰에 표시 될 때까지 모델에 이미 존재합니다. 보기에서 데이터가 데이터베이스에서 가져 오는 시점은 없습니다. $ ('# txtPhoneNumber') .prop ('readonly', 'true') : return;}); '또는 그런 것. – Ingenioushax

+1

당신은 @Ingenioushax를 뛰어 넘었습니다. 자세한 답변을 주셔서 감사합니다! – julianc