2012-11-16 7 views
1

사용자가 입력 한 시간 정보에 대해 15 분 단위로 시행하려고합니다. 예를 들어 오후 12시 15 분, 오전 3시 45 분, 오전 9시 30 분입니다. 모두 허용되지만 오후 2시 35 분은 허용되지 않습니다. 서버 측 유효성 검사가 작동하지만 텍스트 상자가 포커스를 잃었을 때 입력이 유효하지 않다고 말한 다음 제출 버튼을 클릭하기 전에 사용자에게 알리는 것이 좋습니다.MaskedEditValidator가 클라이언트 측에서 작동하지 않습니다.

 <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="True" UpdateMode="Always"> 
      <ContentTemplate> 
       <asp:TextBox ID="txtStartTime" runat="server" AutoPostBack="True" CausesValidation="True"/> 
       <Ajax:MaskedEditExtender ID="txtStartTime_MaskedEditExtender" runat="server" 
        TargetControlID="txtStartTime" MaskType="Time" AcceptAMPM="True" 
        Mask="99:99"> 
       </Ajax:MaskedEditExtender> 
       <asp:RequiredFieldValidator runat="server" ID="StartTimeRequired" 
        ValidationGroup="EventAddEditControls" ControlToValidate="txtStartTime" 
        EnableClientScript="True" SetFocusOnError="True">*</asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
        ErrorMessage="Invalid time format." ControlToValidate="txtStartTime" 
        ValidationGroup="EventAddEditControls" SetFocusOnError="True" 
        EnableClientScript="True" Text="Invalid time format." 
        ValidationExpression="^([1-9]|0[1-9]|1[012]):(00|15|30|45)\s?[aApP]\.?[mM]\.?$" /> 
       <Ajax:MaskedEditValidator ID="MaskedEditValidator1" ControlToValidate="txtStartTime" 
        ControlExtender="txtStartTime_MaskedEditExtender" IsValidEmpty="False" 
        ValidationGroup="EventAddEditControls" 
        ValidationExpression="^([1-9]|0[1-9]|1[012]):(00|15|30|45)\s?[aApP]\.?[mM]\.?$" 
        EnableClientScript="True" SetFocusOnError="True" Text="Time format is invalid." 
        runat="server"></Ajax:MaskedEditValidator> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

는 어떻게 얻을 수 있습니다 (이 가능하다고 가정) 클라이언트 측에서 15 분 단위의 제약 조건을 적용 할 수있는 MaskedEditExtender : 여기 코드는?

+0

그래서 텍스트 상자에 포커스가 없어지면 유효성 검사가 수행되지 않는 문제가 있습니까? 2:35을 입력하고 Enter 키를 누르면 시간 형식이 잘못되었음을 알립니다. 그러나 텍스트 상자 밖으로 탭하면 유효성을 얻지 못합니다. –

+0

수정하십시오. 문제는 텍스트 상자가 포커스를 잃을 때 유효성을 검사하지 않는다는 것입니다. – Matt

답변

2

이것은 지나치게 단순하지만 작동하는 것처럼 보입니다.

제가 한 첫 번째 작업은 RegularExpressionValidator을 주석 처리하는 것이 었습니다.이 작업과 MaskedEditValidator이 실제로 필요하지 않습니다. 요점을 증명하려면 아래 수정 프로그램을 적용하고 RegularExpressionValidator을 주석 처리하지 마십시오. 유효성 검사가 실패하면 두 오류가 모두 표시됩니다.

마지막 것은

InvalidValueMessage 특성과 MaskedEditValidatorText 속성을 대체하는 것이었다 :
<Ajax:MaskedEditValidator ID="MaskedEditValidator1" ControlToValidate="txtStartTime" 
    ControlExtender="txtStartTime_MaskedEditExtender" IsValidEmpty="False" 
    ValidationGroup="EventAddEditControls" 
    ValidationExpression="^([1-9]|0[1-9]|1[012]):(00|15|30|45)\s?[aApP]\.?[mM]\.?$" 
    EnableClientScript="True" SetFocusOnError="True" 
    InvalidValueMessage="Time format is invalid." runat="server"> 
</Ajax:MaskedEditValidator> 

This example

나에게 사용할 올바른 특성에 관한 힌트를 주었다.

이러한 작업을 모두 수행하면 컨트롤을 탭 아웃 할 때 유효성 검사가 수행됩니다. 또한 MaskedEditValidator이 계속 유효 함을 나타냅니다.

+0

당신은 완전히 흔들어! 감사! – Matt