【问题标题】:MaskedEditValidator not working on client sideMaskedEditValidator 在客户端不起作用
【发布时间】:2012-11-16 17:00:55
【问题描述】:

我正在尝试对用户输入的时间信息实施 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 分钟粒度约束(假设这是可能的)?

【问题讨论】:

  • 那么是文本框失去焦点时不发生校验的问题吗?如果我输入 2:35 并按回车,它会告诉我时间格式无效。但是,如果我只是跳出文本框,我不会得到验证。
  • 正确。问题是它不验证文本框何时失去焦点。

标签: c# asp.net validation maskededitextender


【解决方案1】:

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

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

最后一件事是将MaskedEditValidatorText属性替换为InvalidValueMessage属性:

<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 一直在验证。

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多