对某些验证器禁用ValidationSummary

时间:2013-08-21 12:37:35

标签: asp.net

即使验证程序没有“错误消息”,ValidationSummary面板也会显示出来。当我点击提交无效登录时,错误会显示在摘要中。那部分没事。当我使用空文本框提交时,它应该只显示' *',但它也会显示一个空的摘要面板。我怎么能阻止这个。 [有.summary,header,summary ul,.summary ul li的css类。

JS:

function validateTextBox(sender, args) {
        var target = document.getElementById(sender.controltovalidate);
        var is_valid = target.value != "";
        if (is_valid) {
            target.className = "";
        }
        else {
            target.className = "validate";
        }
        args.IsValid = is_valid;
    }

ASPX:

<asp:ValidationSummary ID="vs" runat="server" CssClass="summary"   
 ValidationGroup="vsGroup" DisplayMode="BulletList" EnableClientScript="true" 
 HeaderText="<div class='header'>&nbsp;&nbsp;Please Correct The 
 Following</div>" />

 <asp:TextBox ID="txtSurname" runat="server" class=""></asp:TextBox>
 <asp:CustomValidator ID="CustomValidator1" runat="server" 
 ValidationGroup="vsGroup" ControlToValidate="txtSurname"  
 ClientValidationFunction="validateTextBox" Text="*" 
 ForeColor="Red" ValidateEmptyText="true" ></asp:CustomValidator>

 <asp:TextBox ID="txtLogin" runat="server" class=""></asp:TextBox>
 //....CustomValidator2 just as above..
 <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" 
 ControlToValidate="txtLogin" Text="*" ForeColor="Red" 
 ValidationExpression="^[a-z]{8,10}$" Display="Dynamic" 
 ErrorMessage="Login Does Not Match The Requirements" ValidationGroup="vsGroup" 
 EnableClientScript="true"></asp:RegularExpressionValidator>

<asp:Button ID="btnSubmit" runat="server" Text="Submit" ValidationGroup="vsGroup" />

2 个答案:

答案 0 :(得分:2)

尝试为ShowValidationErrors控件设置false属性为ValidationSummary。将此值设置为 如果应显示验证程序控件的验证摘要,则为true;否则为false。否则,错误。 默认情况下,此值为true

阅读MSDN here

修改

如果你需要为某些控件而不是所有控件禁用ValidationSummary,你可以在客户端和服务器端执行此操作。

var CustomVal = document.getElementById('CustomValidator1ClientID'); 
ValidatorEnable(CustomVal, false);

点击此链接:http://www.codeproject.com/Articles/8635/Custom-Validation-Summary-in-ASP-NET以及此链接:ASP.NET Validation Summary: How to disable validator with JavaScript?

在服务器端,您可以在Page_Load中执行以下操作,以检查是否有任何验证器设置了ErrorMessage,如果没有,则禁用验证器:

if( String.IsNullOrEmpty(CustomValidator1.ErrorMessage))
 //if ErrorMessage is empty, disable this validator only
CustomValidator1.Enabled=false; 

IInd Case :: 当您只想禁用ValidationSummary而不是验证器时 在这种情况下,您只需将ValidationGroup属性设置如下:

//标记

<asp:ValidationSummary ID="vs" runat="server" ValidationGroup="Group1"...

//代码隐藏

protected override void Page_Load(object sender, EventArgs e)
 {
    if( String.IsNullOrEmpty(CustomValidator1.ErrorMessage))
         //if ErrorMessage is empty, exclude this from Validation Summary
        CustomValidator1.ValidationGroup=""; 
        CustomValidator2.ValidationGroup="Group1";
 }

现在确保您将ValidationGroup属性分配给ValidationSummary控件。 所以,提示:所有此类控件的错误消息应显示在ValidationSummary中,将其ValidationGroup属性设置为与ValidationSummary ValidationGroup相同属性。

那些不应在ValidationSummary中显示错误消息的控件,只需将其ValidationGroup属性设置为空。

注意:您也可以在代码后面为ValidationGroup设置ValidationSummary属性。此外。确保您还将ValidationGroup属性和CausesValidation属性添加到“提交”按钮标记,例如:<asp:Button ID="Submit" runat="server" ValidationGroup="vsGroup" CausesValidation="true"/>

注意2 :: 即使没有错误,ValidationSummary仍然可以通过以下类似的HTML显示

<div id="vs" class="validationSummary" style="">
<ul></ul>

这是验证摘要的默认行为,如果您想这样说,则是一种Bug类型。查看此帖子:http://forums.asp.net/t/1657025.aspx/2/10

因此,如果您想在没有错误时隐藏上述HTML,请检查是否有任何li元素,如果没有,则完全隐藏ValidationSummary错误。

<script type="text/javascript">
     $(document).ready(function () {
          if ($(".validationSummary li:visible").length === 0) {
               $(".validationSummary").hide();
          }
     });
</script>
</div>

答案 1 :(得分:1)

您可以将其设置为Enabled="false"Visible="false",然后在触发CustomValidator时(如果需要),您可以在后面的代码中将其设置为vs.Enabled="true"或和vs.Visible="true"