我以前遇到这个问题,但从来没有解决过。我有一个表单与几个验证器和一个CustomValidator。
<asp:Label ID="lblMemberNum" runat="server" Text="Membership #:" CssClass="LabelMedium" ></asp:Label> <asp:TextBox ID="txtMemberNum" runat="server" CssClass="TextBox" ></asp:TextBox> <asp:requiredFieldValidator ID="rfvMemberNum" SetFocusOnError="True" runat="server" ControlTovalidate="txtMemberNum" ErrorMessage="[ Membership # ] is required" CssClass="ValidationMessage" display="Dynamic" >*</asp:requiredFieldValidator> <asp:RegularExpressionValidator ID="revMemberNum" display="Dynamic" runat="server" ControlTovalidate="txtMemberNum" CssClass="ValidationMessage" ErrorMessage="[ Membership # ] can only contain letters" ValidationExpression="^([a-zA-Z\d]+)$" >*</asp:RegularExpressionValidator> <asp:CustomValidator ID="cvMemberNum" runat="server" CssClass="ValidationMessage" display="Dynamic" ControlTovalidate="txtMemberNum" ValidateEmptyText="false" OnServerValidate="cvMemberNum_Validate" ErrorMessage="This membership number is already registered">*</asp:CustomValidator> <asp:ValidationSummary ID="ValidationSummary1" runat="server" CssClass="ValidationMessage" ShowMessageBox="True" ShowSummary="False" />
在服务器端:
protected void cvMemberNum_Validate(object source,ServerValidateEventArgs args) { try { args.IsValid = (!CampaignRegistration.IsMemberRegistered(args.Value)); } catch { args.IsValid = false; } }
我的问题是:ValidationSummary从未显示CustomValidator的消息。这个问题在几个地方被问到,但我没有看到令人满意的答案。
解决方法
尝试在所有验证器和ValidationSummary之间使用ValidationGroup属性。
编辑:另一种可能是服务器验证码
args.IsValid = (!CampaignRegistration.IsMemberRegistered(args.Value));
如果CampaignRegistration.IsMemberRegistered(args.Value)返回false,“!”使它成真,因此使其有效。我想你应该摆脱“!”如下:
args.IsValid = CampaignRegistration.IsMemberRegistered(args.Value);
更新:为了使ValidationSummary在消息框中显示您的自定义验证器消息,您需要具有ClientValidationFunction代码。如果您只需显示摘要而不显示弹出窗口,则不需要。
<asp:CustomValidator ID="cvMemberNum" runat="server" CssClass="ValidationMessage" display="Dynamic" ControlTovalidate="txtMemberNum" ValidateEmptyText="false" OnServerValidate="cvMemberNum_Validate" ClientValidationFunction = "ClientValidate" ErrorMessage="This membership number is already registered">*</asp:CustomValidator> //JavaScript Code. function ClientValidate(source,args) { args.IsValid = false; //you need to add validation logic here }
更多:如果您不想做ClientSide验证,请尝试此技巧来显示警报。对您的CustomValidator ServerValidate方法进行此更改:
protected void cvMemberNum_Validate(object source,ServerValidateEventArgs args) { bool isValid = true; try { isValid = (!CampaignRegistration.IsMemberRegistered(args.Value)); } catch { isValid = false; } args.IsValid = isValid; if(!isValid) { if(!Page.IsClientScriptBlockRegistered("CustomValidation")) Page.RegisterClientScriptBlock("CustomValidation","<script>alert('This membership number is already registered');</script>"); } }
原文地址:https://www.jb51.cc/aspnet/252902.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。