У меня есть страница asp.net, принимающая два входных значения - имя и адрес. Оба они являются обязательными. Я использовал необходимые валидаторы полей и валидацию.
Если пользователь не вводит оба значения, это сообщение об ошибке, если оно срабатывает два раза, хотя сообщение об ошибке является избыточным. Мне нужно отобразить только одно сообщение об ошибке, хотя есть две ошибки.
Примечание. Первоначально я думал, что элемент управления проверкой будет испускать HTML во время загрузки страницы, поэтому я могу использовать "источник просмотра" и делать jQuery на элементах HTML. Но это не так. Он отображается только следующим образом
<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>
Это немного хакерский, но он будет работать:
Добавьте следующую функцию 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 для удаления всех, кроме первого li
в ValidationSummary, который на самом деле является UnorderedList (например, ul
).
Я положил его в 5ms setTimeout
, так как мы хотим, чтобы он запускался только после того, как ValidationSummary закончил добавление всех элементов в ul
.
Код будет работать только в случае неудачи Page_ClientValidate
- это функция, которая выполняет проверку ClientSide.
Page_ClientValidate
не является synchronous
вызовом? Почему мы должны установить время сделки?