我有一个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>
答案 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验证的函数。