MaskedEditValidator无法在客户端工作

时间:2012-11-16 17:00:56

标签: c# asp.net validation maskededitextender

我正在尝试对用户输入的时间信息强制执行15分钟的粒度。因此,例如,下午12:15和凌晨3:45以及上午9:30。都是可以接受的,但不允许下午2:35。服务器端验证可以工作,但如果用户在单击提交按钮之前被告知他们的输入在文本框失去焦点时无效,那将会很好。这是代码:

        <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>

如何让MaskedEditExtender在客户端强制执行15分钟的粒度约束(假设这是可能的)?

1 个答案:

答案 0 :(得分:2)

这似乎过于简单,但似乎有效。

我做的第一件事是评论RegularExpressionValidator - 你真的不需要这个和MaskedEditValidator。要证明这一点,请应用下面的修复,但不要注释RegularExpressionValidator。验证失败后,您将看到两个错误。

最后一件事是用Text属性替换MaskedEditValidator的{​​{1}}属性:

InvalidValueMessage

This example给了我关于正确使用属性的提示。

执行这两项操作会导致在标签退出控件时进行验证。这也表明<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> 一直在验证。