Проверка формы ASP.NET не работает в первый раз - PullRequest
4 голосов
/ 30 октября 2010
<asp:UpdatePanel ID="LoginPanel" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <div id="login">
            <div class="row">
                <div class="label">
                    <asp:Label ID="lblUsername" Text="<%$ Resources:Login, UserNameField %>" runat="server" />
                </div>
                <div class="field">
                    <asp:TextBox ID="txtUsername" MaxLength="12" runat="server" />
                    <asp:RequiredFieldValidator ID="rfvUsername" ControlToValidate="txtUsername" ValidationGroup="vgLogin" SetFocusOnError="true"
                        ErrorMessage="*" ToolTip="<%$ Resources:Login, UserNameRequired %>" runat="server" />
                </div>
            </div>

            <div class="row">
                <div class="label">
                    <asp:Label ID="lblPassword" Text="<%$ Resources:Login, PasswordField %>" runat="server" />
                </div>
                <div class="field">
                    <asp:TextBox ID="txtPassword" MaxLength="12" TextMode="Password" runat="server" />
                    <asp:RequiredFieldValidator ID="rfvPassword" ControlToValidate="txtPassword" ValidationGroup="vgLogin" SetFocusOnError="true"
                        ErrorMessage="*" ToolTip="<%$ Resources:Login, PasswordRequired %>"  runat="server" />
                </div>
            </div>

            <div class="row">
                <div class="label">
                    <asp:Label ID="lblRemember" Text="<%$ Resources:Login, RememberField %>" runat="server" />
                </div>
                <div>
                    <asp:CheckBox ID="chkRemember" Checked="true" ToolTip="<%$ Resources:Login, RememberToolTip %>" runat="server" />
                </div>
            </div>

            <div class="buttons">
                <asp:Button ID="btnLogin" Text="<%$ Resources:Login, Command %>" OnClick="btnLogin_Click" ValidationGroup="vgLogin" CausesValidation="true" runat="server" />
            </div>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

В первый раз, валидаторы не будут проверять, заполнены ли поля или нет, форма просто отправляется независимо от того, что после этого первоначального сбоя форма корректно проверяется каждый раз.* Я знаю, что могу просто спросить (и должен, независимо от того) Page.IsValid на стороне сервера, но я все же хотел бы, чтобы проверка корректно предупредила ошибку ввода пользователя в первый раз вместо ожидания ответа сервера вначале.

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 04 ноября 2010

Порядок загрузки файлов JS может вызывать проблемы здесь, если между ними есть зависимости. Из-за случайной задержки некоторые зависимости могли еще не быть удовлетворены, что приводило к нарушению функциональности. Ваша консоль может дать подсказки, если это так. При последующих загрузках страницы все выглядит нормально, поскольку файлы JS были кэшированы и теперь загружаются без задержек в правильном порядке.

Что попробовать:

Надеюсь, это поможет.

0 голосов
/ 04 ноября 2010

Возможно, это не слишком хороший ответ, но я сталкивался с подобными проблемами в прошлом.Похоже, что элементы управления проверкой ASP не «хорошо играют» внутри UpdatePanels. Я думаю, причина в том, что когда они пытаются выполнить любой тип проверки, они также пытаются записать в состояние просмотра страниц.Состояние просмотра, однако, находится за пределами области панели обновления, что означает, что вы обновляете "середину" страницы без обновления всего состояния страницы, что делает состояние ваших элементов управления несинхронным.В этом случае удалите панель обновления со всех ваших элементов управления, отправьте форму и проверьте, работают ли ваши элементы проверки.

К сожалению, для обходного пути Ive создал пользовательские функции javascript для выполнения проверки на стороне клиента, а также для проверки на стороне сервера и отображения любых ошибок.В этих сценариях я избегал использования элементов управления ASP .NET Validation.

Удачи = \

0 голосов
/ 30 октября 2010

У меня было что-то похожее, когда загружалось большое количество javascript или когда возникла несвязанная ошибка javascript (обычно, но не всегда, связанная с большим количеством javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...