【问题标题】:ASP.NET Form Validation Doesn't work first timeASP.NET 表单验证第一次不起作用
【发布时间】: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(从 ValidatorOnLoadValidatorCommonOnSubmit 函数开始)。

标签: asp.net html validation forms menu


【解决方案1】:

如果JS文件之间存在依赖关系,这里可能会导致JS文件的加载顺序出现问题。由于随机延迟,一些依赖关系可能尚未得到满足,从而导致功能中断。如果是这种情况,您的控制台可能会给出提示。在随后的页面加载中,一切似乎都很好,因为 JS 文件已被缓存并且现在以正确的顺序加载而没有延迟。

要尝试的事情:

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    当加载大量 javascript 或出现不相关的 javascript 错误(通常但并不总是与大量 javascript 相关)时,我也遇到过类似的情况。

    【讨论】:

    • 我的 javascript 保持在最低限度,事实上我认为这与我有一个 onclientclick 事件有关,但我删除了它,它仍然没有第一次验证..跨度>
    【解决方案3】:

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

    无论如何,为了证明这一点,请从您的控件周围移除更新面板,提交您的表单,并检查您的验证控件是否有效。

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

    祝你好运=\

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 2014-11-23
      相关资源
      最近更新 更多