asp.net – 使CustomValidator与ValidationSummary消息框一起工作的优雅方式

前端之家收集整理的这篇文章主要介绍了asp.net – 使CustomValidator与ValidationSummary消息框一起工作的优雅方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以前遇到这个问题,但从来没有解决过。我有一个表单与几个验证器和一个CustomValidator。
  1. <asp:Label ID="lblMemberNum" runat="server" Text="Membership #:" CssClass="LabelMedium" ></asp:Label>
  2. <asp:TextBox ID="txtMemberNum" runat="server" CssClass="TextBox" ></asp:TextBox>
  3. <asp:requiredFieldValidator ID="rfvMemberNum" SetFocusOnError="True" runat="server"
  4. ControlToValidate="txtMemberNum" ErrorMessage="[ Membership # ] is required"
  5. CssClass="ValidationMessage" Display="Dynamic" >*</asp:requiredFieldValidator>
  6. <asp:RegularExpressionValidator ID="revMemberNum" Display="Dynamic" runat="server"
  7. ControlToValidate="txtMemberNum" CssClass="ValidationMessage"
  8. ErrorMessage="[ Membership # ] can only contain letters"
  9. ValidationExpression="^([a-zA-Z\d]+)$" >*</asp:RegularExpressionValidator>
  10. <asp:CustomValidator ID="cvMemberNum" runat="server"
  11. CssClass="ValidationMessage" Display="Dynamic"
  12. ControlToValidate="txtMemberNum" ValidateEmptyText="false"
  13. OnServerValidate="cvMemberNum_Validate"
  14. ErrorMessage="This membership number is already registered">*</asp:CustomValidator>
  15.  
  16. <asp:ValidationSummary ID="ValidationSummary1" runat="server"
  17. CssClass="ValidationMessage"
  18. ShowMessageBox="True" ShowSummary="False" />

在服务器端:

  1. protected void cvMemberNum_Validate(object source,ServerValidateEventArgs args)
  2. {
  3. try
  4. {
  5. args.IsValid = (!CampaignRegistration.IsMemberRegistered(args.Value));
  6. }
  7. catch
  8. {
  9. args.IsValid = false;
  10. }
  11. }

我的问题是:ValidationSummary从未显示CustomValidator的消息。这个问题在几个地方被问到,但我没有看到令人满意的答案。

解决方法

尝试在所有验证器和ValidationSummary之间使用ValidationGroup属性

编辑:另一种可能是服务器验证码

  1. args.IsValid = (!CampaignRegistration.IsMemberRegistered(args.Value));

如果CampaignRegistration.IsMemberRegistered(args.Value)返回false,“!”使它成真,因此使其有效。我想你应该摆脱“!”如下:

  1. args.IsValid = CampaignRegistration.IsMemberRegistered(args.Value);

更新:为了使ValidationSummary在消息框中显示您的自定义验证器消息,您需要具有ClientValidationFunction代码。如果您只需显示摘要不显示弹出窗口,则不需要。

  1. <asp:CustomValidator ID="cvMemberNum" runat="server"
  2. CssClass="ValidationMessage" Display="Dynamic"
  3. ControlToValidate="txtMemberNum" ValidateEmptyText="false"
  4. OnServerValidate="cvMemberNum_Validate"
  5. ClientValidationFunction = "ClientValidate"
  6. ErrorMessage="This membership number is already registered">*</asp:CustomValidator>
  7. //JavaScript Code.
  8. function ClientValidate(source,args)
  9. {
  10. args.IsValid = false; //you need to add validation logic here
  11. }

更多:如果您不想做ClientSide验证,请尝试此技巧来显示警报。对您的CustomValidator ServerValidate方法进行此更改:

  1. protected void cvMemberNum_Validate(object source,ServerValidateEventArgs args)
  2. {
  3. bool isValid = true;
  4. try
  5. {
  6. isValid = (!CampaignRegistration.IsMemberRegistered(args.Value));
  7. }
  8. catch
  9. {
  10. isValid = false;
  11. }
  12. args.IsValid = isValid;
  13.  
  14. if(!isValid)
  15. {
  16. if(!Page.IsClientScriptBlockRegistered("CustomValidation"))
  17. Page.RegisterClientScriptBlock("CustomValidation","<script>alert('This membership number is already registered');</script>");
  18.  
  19. }
  20.  
  21. }

猜你在找的asp.Net相关文章