ASP.NET Web窗体自定义验证器不会触发

| 我的页面上有一个自定义验证器,用于文件上传控件。
<asp:FileUpload ID=\"fuVendorBrief\" runat=\"server\" />
<br />
<asp:CustomValidator ID=\"cvVendorBriefFile\" Display=\"Dynamic\" runat=\"server\" ValidationGroup=\"EditorValidate\" ControlToValidate=\"fuVendorBrief\" OnServerValidate=\"cvVendorBriefFile_ServerValidate\" ErrorMessage=\"You must upload a vendor brief PDF file.\">     
</asp:CustomValidator>
然后,我还有一个按钮。
<asp:Button ID=\"btnSubmit\" ValidationGroup=\"EditorValidate\" OnClick=\"btnSubmit_Click\" runat=\"server\" Text=\"Add Vendor Brief\" />
我已经定义了我的自定义验证器事件,如下所示:
protected void cvVendorBriefFile_ServerValidate(object source, ServerValidateEventArgs args)
{
    CustomValidator fileUploadValidator = (CustomValidator)source;
    FileUpload vendorBriefFileUpload = (FileUpload)fileUploadValidator.Parent.FindControl(fileUploadValidator.ControlToValidate);
    args.IsValid = vendorBriefFileUpload.HasFile && vendorBriefFileUpload.FileName.ToLower().EndsWith(\".pdf\");
}
这个自定义验证器甚至没有被解雇。也许我只是累了,但是一切对我来说似乎都还不错,所以很感激。如果在服务器验证事件中的任何地方放置断点,则在单击“提交”时不会击中该断点。但是,我可以在“提交”按钮的单击事件中达到断点。 有任何想法吗? 编辑-忘了提一下,我在页面上还有其他验证控件,例如必填字段验证器,它们可以很好地触发。 编辑2-如果您想要页面及其代码的完整源,请遵循以下链接: ASPX CS 让我知道您是否发现任何异常。我在这里睡着了一半,希望我只是想念一些愚蠢的东西。     
已邀请:
尝试完全去除
ControlToValidate
。尽管我以前从未尝试过验证文件上传,但是如果内容为空,大多数验证器都不会触发((4除外)。取消控制以进行验证应使其始终针对该组触发。 编辑(Chevex)-
ControlToValidate
是问题,但不是因为它已损坏。默认情况下,它不会在没有值的控件上触发,如上所述。设置自定义验证程序控件属性“ 6”可以解决此问题。不幸的是,我不得不开始这个巨大的问题才发现这一点,但是现在我们知道了! :)     
您需要为按钮和验证器指定相同的ValidationGroup = \“ \”     
对我来说,当验证器及其相关输入位于控件中并在控件标记中设置了“ 7”时,就会发生这种情况。这导致CustomValidator继承了
Visible = false
属性,并阻止了验证的触发。在正常的页面加载中,直到页面生命周期的后期,我才使控件可见。 无论如何,如果您在
Page.Validate()
方法上设置断点,则可以检查ѭ​​10ѭ集合,看看是否可能发生类似的事情。     
在Button声明中添加
CausesValidation=\"True\"
。     
如果您在http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(%22ASP%3aCUSTOMVALIDATOR%22);k(VS.HTMLDESIGNER.HTML);中查看文档, k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV3.5%22); k(DevLang-ASPX)&rd = true 你看   使用验证程序控件时,   应该经常检查结果   之前的服务器端验证   执行任何处理。之后   回发但在您的事件方法之前   被调用,页面调用   验证器控件和集合   他们的结果进入Page.IsValid   属性。 (您也可以致电   验证器控件显式使用   Validate方法。)   代码,请检查   Page.IsValid属性返回true   在处理输入之前。即使   启用脚本的浏览器可能会阻止   从发生的回发   客户是否有验证检查   失败了,你也应该经常检查   服务器代码中的Page.IsValid之前   处理经过验证的数据。 因此,您是否正在测试页面加载中的
Page.IsValid
?     

要回复问题请先登录注册