我正在构建一个 CustomValidator 来处理我自己的应用程序在时间字段(“09:00”、“15:35”、...)上的逻辑,但我偶然发现了一种我在网上找不到任何解释的行为。
我现在的重点是在客户端执行的验证逻辑。
问题是,正如标题中所说,当且仅当我在 Validator 中使用我正在验证的文本框的 ID 设置 ControlToValidate 属性时,一旦焦点离开文本框,验证就会被触发;它甚至在 onblur 事件之前触发,这对我来说绝对是有害的,因为我正在使用 onblur 事件来标准化时间格式(例如“9:00”->“09:00”、“11.45”->“11: 45"),因此,验证逻辑可能会收到不正确的值。另一方面,如果 ControlToValidate 属性保持空白,则 ClientValidationFunction 仅在提交/回发时触发。
我找到的唯一相关答案是这个https://stackoverflow.com/a/8649697/450684,但对我来说,这根本没有意义。为什么 ControlToValidate 的存在表明我希望在 onblur 之前执行客户端验证?我不要!有没有办法抑制这种行为?
这是一个示例页面:
<asp:TextBox runat="server" AutoPostBack="false" ID="txtBox1" onblur="FormatText(this);" />
<asp:CustomValidator runat="server" ID="CV1" ControlToValidate="txtBox1" ClientValidationFunction="Test1" />
<asp:CustomValidator runat="server" ID="CV2" ClientValidationFunction="Test2" />
<asp:Button ID="btn1" Text="postback" runat="server" OnClick="btn1_Click" />
<asp:Label ID="lbl1" runat="server" />
<script type="text/javascript">
function FormatText(txtBox1)
{
alert('FormatText');
}
function Test1(val, args)
{
alert('Test1');
}
function Test2(val, args)
{
alert('Test2');
}</script>
我想要的是 Test1 和 Test2 都只在 btn1 的点击时执行;相反,在 txtBox1 的 onblur 事件中,我得到 Test1 和 FormatText 按此顺序执行
ASP.NET 的客户端验证对我来说写和学习真的很有趣,不要让它毁了一切 :-)
谢谢
PS:.NET 框架的版本是 4.0。另外,服务器端语言是 C#,如果重要的话