ASP.NET Web表单自定义验证程序未触发

Che*_*hev 10 c# asp.net validation events webforms

我的页面上有一个自定义验证器,用于文件上传控制.

<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>
Run Code Online (Sandbox Code Playgroud)

然后我还有一个按钮.

<asp:Button ID="btnSubmit" ValidationGroup="EditorValidate" OnClick="btnSubmit_Click" runat="server" Text="Add Vendor Brief" />
Run Code Online (Sandbox Code Playgroud)

我已经定义了我的自定义验证器事件......

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");
}
Run Code Online (Sandbox Code Playgroud)

这个自定义验证器甚至没有被解雇.也许我只是累了,但是一切看起来都不错,所以我很欣赏这种见解.如果我在服务器验证事件中的任何地方删除断点,那么当我单击提交时它不会被点击.我可以在提交按钮的点击事件中点击断点.

有任何想法吗?

编辑 - 忘了在页面上提到我有其他验证控件,比如必需的字段验证器,它们可以正常启动.

编辑2 - 如果您想要页面的完整源代码及其代码隐藏,请遵循以下链接:

如果你看到任何奇怪的东西,请告诉我.我在这里半睡半醒,我希望我只是缺少一些愚蠢的东西.

Jam*_*rgy 20

尝试ControlToValidate完全删除.虽然我以前从未尝试过验证文件上传,但RequiredField如果内容为空,大多数验证器都不会触发(除外).取消控制以进行验证应该始终为该组开火.

编辑(Chevex) - 这ControlToValidate是问题,但不是因为它被打破了.默认情况下,它不会触发没有值的控件,如上所述.设置自定义验证程序控件属性ValidateEmptyText="true"可解决此问题.很遗憾,我不得不开始这个巨大的问题才发现,但现在我们知道了!:)