asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net – 使CustomValidator与ValidationSummary消息框一起工作的优雅方式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我以遇到这个问题,但从来没有解决过。我有一个表单与几个验证器和一个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>"); 

    }

}

大佬总结

以上是大佬教程为你收集整理的asp.net – 使CustomValidator与ValidationSummary消息框一起工作的优雅方式全部内容,希望文章能够帮你解决asp.net – 使CustomValidator与ValidationSummary消息框一起工作的优雅方式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。