<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
,但我仍然希望验证能够在第一时间正确提醒用户输入错误先等待服务器响应。
我做错了什么?
最佳答案
如果 JS 文件之间存在依赖关系,则 JS 文件的加载顺序可能会导致此处出现问题。由于随机延迟,某些依赖项可能尚未得到满足,从而导致功能中断。如果是这种情况,您的控制台可能会给出提示。在随后的页面加载中,一切似乎都很好,因为 JS 文件已缓存,现在可以按正确的顺序无延迟地加载。
要尝试的事情:
- 玩转 JS 包含顺序
- 尽量推迟使用 直到 body.onload 之后的依赖关系 解雇了。
- 您可能还想试试 the rather involved solution offered on aspdotnetfaq .
希望这对您有所帮助。
关于ASP.NET 表单验证第一次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056903/