Скрыть избыточное сообщение об ошибке в ASP.Net ValidationSummary

0

У меня есть страница asp.net, принимающая два входных значения - имя и адрес. Оба они являются обязательными. Я использовал необходимые валидаторы полей и валидацию.

Если пользователь не вводит оба значения, это сообщение об ошибке, если оно срабатывает два раза, хотя сообщение об ошибке является избыточным. Мне нужно отобразить только одно сообщение об ошибке, хотя есть две ошибки.

  • Как мы можем обрабатывать его с помощью jQuery?
  • Как мы можем обрабатывать его с помощью разметки ASP.Net?

Примечание. Первоначально я думал, что элемент управления проверкой будет испускать HTML во время загрузки страницы, поэтому я могу использовать "источник просмотра" и делать jQuery на элементах HTML. Но это не так. Он отображается только следующим образом

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

Результат

Изображение 174551

Разметка 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>
  • 2
    Почему вы не используете разные сообщения об ошибках для разных валидаторов? Это также более удобно для пользователя.
  • 0
    @TimSchmelter TimSchmelter У меня нет выбора здесь. Это утвержденное требование. Я не могу изменить это, если нет доказательства, что нет никакого способа справиться с этим.
Показать ещё 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 для удаления всех, кроме первого li в ValidationSummary, который на самом деле является UnorderedList (например, ul).
Я положил его в 5ms setTimeout, так как мы хотим, чтобы он запускался только после того, как ValidationSummary закончил добавление всех элементов в ul.
Код будет работать только в случае неудачи Page_ClientValidate - это функция, которая выполняет проверку ClientSide.

  • 1
    Разве Page_ClientValidate не является synchronous вызовом? Почему мы должны установить время сделки?
  • 1
    Как вы заметили, задержка не указана в ClientValidate. Это на Jquery. Как я уже говорил в своем ответе, задержка относится к сводке, которая в некоторых браузерах (например, FF) происходит в другом потоке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню