gpt4 book ai didi

asp.net - 为什么 CustomValidator 在文本框的 onblur 上触发

转载 作者:行者123 更新时间:2023-12-04 05:21:24 25 4
gpt4 key购买 nike

我正在构建一个 CustomValidator 来处理我自己的应用程序在时间字段(“09:00”、“15:35”等)上的逻辑,但我遇到了一种行为,我在网上找不到任何解释。

我现在的重点是在客户端执行的验证逻辑。

问题是,正如标题中所说,当且仅当我在验证器中使用我正在验证的文本框的 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#

最佳答案

我认为正在发生的事情是这样的:

ASP.NET 客户端验证的标准行为是在字段退出时进行验证。这是一个观察,而不是对已发布标准的引用(尽管可能有一个。)开箱即用的验证器都以这种方式运行。所有这些都需要指定要验证的特定字段。

自定义验证器允许您验证单个控件(通过使用 ControlToValidate 指定它),或者让您验证控件的组合,在这种情况下,您可以将 ControlToValidate 设置为空字符串。除非事情发生了变化,否则您必须指定它;如果省略该属性,则不会进行验证。

所以...如果您指定要验证的控件,则自定义验证器的行为与其他所有验证器一样,并对退出该字段的用户使用react。如果您不指定要验证的控件,则它不知道您对哪些控件感兴趣,也不会这样做。

您可以通过编写一个真正自定义的验证器来解决这个问题:从 BaseValidator 继承。这实际上会很有趣。

关于asp.net - 为什么 CustomValidator 在文本框的 onblur 上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com