【发布时间】:2011-05-02 16:43:33
【问题描述】:
<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,但我仍然希望验证能够在第一时间正确提醒用户输入错误,而不是先等待服务器响应.
我做错了什么?
【问题讨论】:
-
您使用的是什么版本的 asp.net? v2.0 中验证器中的 asp.net 不适用于更新面板(因为在发布 v2.0 时更新面板不存在),但它们适用于 v3.5。此外,最好使用带有文本而不是 Resources:Login 选项的示例,因为它可以更快地设置测试用例
-
我尝试了提供的代码示例,但无法模拟您的情况。我建议您使用 IE 开发人员工具或 firebug 调试验证 js(从
ValidatorOnLoad和ValidatorCommonOnSubmit函数开始)。
标签: asp.net html validation forms menu