【问题标题】:CustomValidator ServerValidate method does not fireCustomValidator ServerValidate 方法不会触发
【发布时间】:2012-04-16 10:27:18
【问题描述】:

我已经在我的表单上输入了CustomValidator。我还没有设置它的ControlToValidate 属性。在其ServerValidate 事件中,我写了以下内容:

protected void CustomValidator1_ServerValidate(object source,      
                                               ServerValidateEventArgs args)
{
    args.IsValid = false;
}

我为这个方法设置了一个断点,但它似乎永远不会到达那个点。但如果我在另一种形式上这样做,它就像一个魅力。

  1. 按钮的ValidationGroup 属性和CustomValidator 相同
  2. 我尝试删除按钮和CustomValidator中的这个属性,还是不行。

似乎有一些东西。我只是在表单上放了一个CustomValidator,除了设置它的ServerValidate 事件方法之外,没有触及它的任何属性。

编辑:这是 aspx 部分:

 <asp:CustomValidator ID="CustomValidator2" runat="server" 
       ErrorMessage="This is a test" 
   onservervalidate="CustomValidator1_ServerValidate" 
   ValidationGroup="PA"></asp:CustomValidator>


<asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px" 
          onclick="Button1_Click" ValidationGroup="PA" />

【问题讨论】:

    标签: c# asp.net customvalidator


    【解决方案1】:

    尝试通过Page.Validate 在按钮单击处理程序中强制验证:

    protected void Button1_Click(Object sender, EventArgs e)
    {
        Page.Validate();
        if(Page.IsValid)
        {
           // servervalidate should have been called
        }
    }
    

    编辑(来自 cmets):

    如果您希望 customvalidator 验证您的控件中是否没有输入/选择任何内容,则需要将 ValidateEmptyText 设置为 true。您可能还想让CustomValidator 替换RequiredFieldValidators

    我假设 aspx 上的验证器顺序决定是否调用 customvalidator 的 severvalidate 如果以前的验证器已经生成了Page.IsValid=false。或者 ASP.NET 非常聪明,它假设 SeverValidate 比简单的 text-is-empty 检查更昂贵。

    【讨论】:

    • 但是其他验证器是如何工作的呢?我在同一个表单上有几个RequiredFieldValidator,但它们工作正常。再一次,我在另一个表单上做同样的事情,没有问题,它验证了。事情是 ServerValidate 方法不会触发。
    • @MikeJM:我不知道。您是否在回发时在 page_load 中进行数据绑定?你在给其他地方打电话Page.Validate()吗?你有任何 javascript 错误吗? RequiredFieldValidators 会阻止回发吗?它会发回吗?
    • 是的,我在 page_load 中进行数据绑定,但在 PostBack 中没有。我从不在其他任何地方调用 Page.validate()。我没有收到任何 javascript 错误。RequiredFieldValidators 防止回发。它正在回发。
    • @MikeJM:你检查过ServerValidate 是否在Page.Validate() 上触发了吗?
    • 谢谢各位,ValidateEmptyText 帮了我)
    【解决方案2】:

    我还想为同时使用 CustomValidators 和 RequiredFieldValidators 的人提供更多帮助。应该考虑到首先进行客户端验证。并且服务器端验证只会在 PostBack 之后发生。我确定你明白了,但以防万一这不是很清楚:这意味着首先绑定到某些客户端工作验证器的所有控件必须有效才能让回发发生。在页面之后。 IsValid 是真正的服务器端内容,并回发包括服务器端验证消息在内的任何更改。

    以下是使 CustomVCalidators 和其他内置验证器同时工作的方法:

    1. 将两组验证器设置为在客户端工作。在这种情况下,我们必须确保为自定义验证器指定将在客户端进行验证的脚本。无需编写脚本,只需填写 ServerValidate 方法即可在服务器中进行验证。即使 EnableClientScript 属性设置为 True。

    2. 将两组验证器设置为在服务器端工作。为此,只需将 EnableClientScript 设置为 False。但请注意,这会加载服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多