【发布时间】:2011-08-06 13:52:27
【问题描述】:
我的页面上有一个用于文件上传控件的自定义验证器。
<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 - 如果您想要页面的完整源代码及其代码隐藏,请点击以下链接:
【问题讨论】:
-
如果你添加一个断点它不会中断?
-
不,如问题所述,服务器验证事件
cvVendorBriefFile_ServerValidate中的断点不会不被命中。按钮单击事件 do 中的断点被命中。 -
现在提供的两个答案都是错误的,我用你的代码做了一个实验室,它可以工作,你还有别的东西,也许在客户端。当我按下按钮时,代码会进入验证。试试看,将代码复制粘贴到新页面中。 (更新:答案没有错,只是没有解决你的问题)
-
有趣。我将不得不进一步玩这个。我只是做了同样的事情,你是对的。在新页面中一切正常。我被难住了。
-
我在问题末尾添加了一些指向完整源代码的链接。
标签: c# asp.net events validation webforms