【问题标题】:Custom validator is not firing even the textbox is not empty即使文本框不为空,自定义验证器也不会触发
【发布时间】:2011-05-30 09:17:30
【问题描述】:

我有一个cutomvalidator,textbox.text = 1 和一个子程序:

1.
asp:TextBox id="tbxNumber" runat="server" MaxLength="100

2.
asp:CustomValidator id="vNumeric" runat="server" ControlToValidate="tbxNumber" Display="None" OnServerValidate="ValidateNumbers2"

3.
Sub ValidateNumbers2(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)

If Not IsNumeric(args.Value) Then  

  args.IsValid = False

Else

   args.IsValid = True

End If


End Sub

当我尝试调试 vNumeric.Validate 时,子 ValidateNumbers2 不会触发?为什么?

想法?我在这个小问题上浪费了太多时间。由于某些原因,我只需要使用 customvalidator。

【问题讨论】:

  • 你什么时候尝试过调试,点击保存按钮后,或者通过调用 vNumeric.Validate() 调用代码中的方法?
  • 点击按钮事件后,ValidateNumbers2 不会触发,就像什么都没发生一样
  • 你已经在那个按钮上将 CauseValidation 设置为 true 并在 ValidateNumbers2 的开头放置断点,对吧?
  • 我已经试过了,但是什么也没发生,我再试一次。
  • 按钮或文本框上的 CauseValidation="True" 也没有帮助。

标签: asp.net customvalidator


【解决方案1】:

如果您在测试时文本框为空,则不会触发。你需要设置

 ValidateEmptyText="True"

在您的自定义验证器中。

【讨论】:

  • 即使文本框不是空的,自定义验证器也不会触发
  • 您在使用更新面板吗?而且您没有使用 ValidationGroups?
  • 使用 updatePanel,但不使用 ValidationGroups
  • 我有时会遇到更新面板的问题。您可以尝试在没有更新面板的情况下对其进行测试。
【解决方案2】:

你是否改变了它的ClientId模式,Validators可能不支持clientId模式静态

Validators and ClientIDMode issue (ASP.NET)

//////////////////

您可以尝试使用 Page.Validate() 的强制验证;

【讨论】:

  • 如果我是你,我会尝试创建一个空白测试页面并添加非常简单的文本框和服务器验证。如果它有效,则对象设置可能有一些错误(我曾经在 FormView 中使用自定义验证器但它不起作用,我使用 lable 代替,如本主题 stackoverflow.com/questions/5880359/… 。如果它仍然不起作用,您的代码可能是错误的或者它可能是一些全局设置。
  • 如果您赶时间/累了不想浪费时间,只需使用 if-else 条件和标签即可。当您更改文本框中的值时,使用 javascipt 隐藏该标签。这可能会模仿验证器的外观,尽管这不是最好的方法。
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多