0

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

当用户没有输入这两个值时,如果错误消息被触发两次,则错误消息是多余的。即使有两个错误,我也只需要显示一个错误消息。

  1. 我们如何使用 jQuery 来处理它?
  2. 我们如何使用 ASP.Net 标记来处理它?

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

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

结果

在此处输入图像描述

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>
4

1 回答 1

2

这有点骇人听闻,但它会起作用:

添加以下 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 来删除liValidationSummary 中除第一个之外的所有内容 - 这实际上是一个 UnorderedList(例如ul)。
我把它放在 5 毫秒内setTimeout,因为我们希望它仅在 ValidationSummary 完成将所有项目添加到ul.
代码只有在失败时才会运行Page_ClientValidate——这是执行客户端验证的函数。

于 2012-11-26T14:42:50.813 回答