隐藏ASP.Net ValidationSummary中的冗余错误消息

时间:2012-11-26 13:21:00

标签: jquery asp.net validation-controls

我有一个asp.net页面接受两个输入值 - 名称和地址。它们都是必填字段。我使用了必填字段验证器和验证摘要。

如果错误消息是多余的,如果用户未同时输入两个值,则会触发错误消息两次。即使有两个错误,我只需要显示一条错误消息。

  1. 我们如何使用jQuery处理它?<​​/ li>
  2. 我们如何使用ASP.Net标记处理它?<​​/ li>

    注意:我最初认为验证控件将在页面加载时发出HTML,这样我就可以使用“查看源代码”并对HTML元素执行jQuery。但事实并非如此。它只呈现如下

     <div id="vsumAll" class="validationsummary" style="display:none;"> </div>
    

    结果

    enter image description here

    ASP.Net标记

    <body>
    <form id="form1" runat="server">
    <div>
        <table cellpadding="5" cellspacing="5" width="100%">
            <tr>
                <td>
                    <table border="0" align="center" cellpadding="0" cellspacing="0" width="100%">
                        <tr>
                            <td>
                                Name
                            </td>
                            <td>
                                <asp:TextBox runat="server" ID="txtName"></asp:TextBox>
                                <asp:RequiredFieldValidator runat="server" ID="reqWorkorderFormat" ControlToValidate="txtName"
                                    Text="*" ErrorMessage="Fill all values!"></asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                Address
                            </td>
                            <td>
                                <asp:TextBox runat="server" ID="txtAddresss"></asp:TextBox>
                                <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtAddresss"
                                    Text="*" ErrorMessage="Fill all values!"></asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:Button runat="server" ID="btnSave" Text="Save" />
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" />
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </div>
    </form>
    </body>
    

1 个答案:

答案 0 :(得分:2)

这有点hackish,但它会起作用:

添加以下Javascript函数:

function submitValidate() {
    var isValid = Page_ClientValidate('');

    if (!isValid) {
        setTimeout("$('#vsumAll ul li:not(:first)').remove()", 5);
    }

    return isValid;
}

在提交按钮中添加以下内容:

<asp:Button runat="server" ID="btnSave" Text="Save" OnClientClick="submitValidate();"/>

最后,请确保ClientIDMode="Static"

上有ValidationSummary

<强>解释
它使用JQuery删除ValidationSummary中的第一个li以外的所有内容 - 实际上是无序列表(例如ul)。 我把它放在5ms setTimeout中,因为我们希望它只在ValidationSummary完成将所有项目添加到ul之后才能运行。 只有在Page_ClientValidate失败时才会运行代码 - 这是执行ClientSide验证的函数。