ASP.NET表单验证第一次不起作用

时间:2010-10-30 01:53:19

标签: asp.net html validation forms menu

<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 个答案:

答案 0 :(得分:1)

如果JS文件之间存在依赖关系,那么JS文件的加载顺序可能会导致问题。由于随机延迟,一些依赖关系可能尚未满足,导致功能中断。如果是这种情况,您的控制台可能会给出提示。在后续的页面加载中,一切看起来都很好,因为JS文件被缓存,现在加载时没有按正确的顺序延迟。

要尝试的事情:

希望这有帮助。

答案 1 :(得分:0)

当有大量的javascript被加载时,或者当存在无关的javascript错误时(通常但并不总是与大量的javascript相关),我发生了类似的事情。

答案 2 :(得分:0)

这可能不是一个很好的答案,但我过去遇到过类似的问题。 ASP验证控件似乎并没有真正在UpdatePanels中“玩得很好”。 我认为的原因是,当他们尝试执行任何类型的验证时,他们也会尝试写入页面视图状态。但是,视图状态位于更新面板区域之外,这意味着您更新了页面的“中间”,而不会更新整个页面的状态,从而使控件的状态不同步。

在任何情况下,要证明这一点,请从控件周围删除更新面板,提交表单,并检查验证控件是否有效。

不幸的是,为了解决方法,我创建了自定义javascript函数来执行客户端验证,然后还执行服务器端验证并显示任何错误。在这些场景中,我避免使用ASP .NET验证控件。

祝你好运= \