【发布时间】: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