Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CustomValidator ServerValidate方法未激发_C#_Asp.net_Customvalidator - Fatal编程技术网

C# CustomValidator ServerValidate方法未激发

C# CustomValidator ServerValidate方法未激发,c#,asp.net,customvalidator,C#,Asp.net,Customvalidator,我在表格上放了一个CustomValidator。我没有将其控件设置为validate属性。在其ServerValidate事件中,我编写了以下内容: protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { args.IsValid = false; }

我在表格上放了一个
CustomValidator
。我没有将其
控件设置为validate
属性。在其
ServerValidate
事件中,我编写了以下内容:

protected void CustomValidator1_ServerValidate(object source,      
                                               ServerValidateEventArgs args)
{
    args.IsValid = false;
}
我给这个方法设置了一个断点,但它似乎永远不会到达那个点。但如果我用另一种形式做这件事,它就像一个符咒

  • 按钮的
    ValidationGroup
    属性和
    CustomValidator
    属性相同
  • 我尝试在按钮和
    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" />
    

    尝试通过以下方式在按钮单击处理程序中强制验证:

    编辑(来自评论):

    如果希望customvalidator在控件中未输入/选择任何内容时进行验证,则需要设置为true。您还可能希望让
    CustomValidator
    替换
    RequiredFieldValidator


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

    我还想为同时使用CustomValidator和RequiredFieldValidator的用户提供更多帮助。应该考虑到客户端验证首先发生。服务器端验证将仅在回发后进行。我相信您已经理解了,但为了以防万一,这还不是很清楚:这意味着首先,绑定到某些客户端工作验证器的所有控件都必须有效,才能进行回发。在第页之后。IsValid是真正的服务器端内容,它会发生并发回包含服务器端验证消息的任何更改

    因此,以下是可以使CustomvCalidator和其他内置验证器同时工作的方法:

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

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


  • 但是其他验证器是如何工作的呢?我有几个相同表单上的RequiredFieldValidator,但它们工作正常。再一次,我在另一个表单上做了完全相同的事情,没有问题,它验证了。问题是ServerValidate方法没有启动。@MikeJM:我不知道。您是否正在回发页面加载中进行数据绑定?您正在调用其他地方的
    Page.Validate()
    ?您是否有任何javascript错误?RequiredFieldValidator是否阻止回发?是的,我正在加载页面中进行数据绑定,但不是在回发中。我从不在任何其他地方调用Page.validate()。我没有收到任何javascript错误。RequiredFieldValidator阻止回发。它正在发回。@MikeJM:你检查过
    ServerValidate
    是否在
    Page.Validate()
    ?谢谢大家,ValidateEmptyText帮助了我)
    protected void Button1_Click(Object sender, EventArgs e)
    {
        Page.Validate();
        if(Page.IsValid)
        {
           // servervalidate should have been called
        }
    }