.net UpdatePanel中的CompareValidator-VS2008

.net UpdatePanel中的CompareValidator-VS2008,.net,ajax,validation,updatepanel,.net,Ajax,Validation,Updatepanel,我正在使用UpdatePanel,希望在两个文本框上放置一个CompareValidator,以验证用户输入的密码和确认是否相同 这很好(我有VS2008,正在使用.NET 3.5)开箱即用,但有一个小问题: 在用户有机会输入第二个文本框之前,验证将在用户单击第一个文本框后立即启动。这并没有在编程上造成任何真正的问题(所发生的只是错误消息显示,当他们输入确认时,它就会消失),但是我们的测试人员说这是一个问题。只有在用户单击“保存”后才能启动验证,否则它将无法通过UA测试 如何让CompareVa

我正在使用UpdatePanel,希望在两个文本框上放置一个CompareValidator,以验证用户输入的密码和确认是否相同

这很好(我有VS2008,正在使用.NET 3.5)开箱即用,但有一个小问题:

在用户有机会输入第二个文本框之前,验证将在用户单击第一个文本框后立即启动。这并没有在编程上造成任何真正的问题(所发生的只是错误消息显示,当他们输入确认时,它就会消失),但是我们的测试人员说这是一个问题。只有在用户单击“保存”后才能启动验证,否则它将无法通过UA测试

如何让CompareValidator在两个框中都输入文本后才能启动

编辑:

下面是一个标记示例

    <div>
        <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
        <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" /></div>    
    </div>
    <div>
        <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
        <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
    </div>
    <asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation" ControlToValidate="txtPassword" ControlToCompare="txtConfirmPassword" runat="server" ErrorMessage="Passwords do not match"></asp:CompareValidator>

上述内容位于页面上UpdatePanel的ContentTemplate中包含的控件内


(为了简洁起见删除了CSS类和样式)

您可以关闭该验证器的客户端验证

EnableClientScript="false"
不过,这意味着需要往返服务器以报告无效状态,并且必须确保在继续之前检查页面是否确实有效

Page.Validate("PublishPassValidation");

if (Page.IsValid)
{
    // Do Stuff
}

您可以关闭该验证器的客户端验证

EnableClientScript="false"
不过,这意味着需要往返服务器以报告无效状态,并且必须确保在继续之前检查页面是否确实有效

Page.Validate("PublishPassValidation");

if (Page.IsValid)
{
    // Do Stuff
}

我感觉你在更新面板上启用了子触发器

用户是否在密码框中按“回车”键?您能否确认是否出于某种原因,更新面板在移动焦点后正在执行部分刷新


如果是这样,它将触发验证。

我感觉您在更新面板上启用了子触发器

用户是否在密码框中按“回车”键?您能否确认是否出于某种原因,更新面板在移动焦点后正在执行部分刷新


如果是,它将触发验证。

尝试切换它,以便在确认文本框而不是密码文本框中完成验证。这样,在您修改确认文本框或提交表单之前,它不会触发。您可能希望在密码文本框中有一个必需的字段验证器

<div>
    <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" />
         <asp:RequiredFieldValidator runat="server" ID="passwordRequiredValidator"
                                     ControlToValidate="txtPassword"
                                     ValidationGroup="PublishPassValidation"
                                     ErrorMessage="Password is required."  />    
    </div>    
</div>
<div>
    <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
</div>
<asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation"
                      ControlToValidate="txtConfirmPassword"
                      ControlToCompare="txPassword" runat="server"
                      ErrorMessage="Passwords do not match">
</asp:CompareValidator>

尝试切换,以便在确认文本框而不是密码文本框中进行验证。这样,在您修改确认文本框或提交表单之前,它不会触发。您可能希望在密码文本框中有一个必需的字段验证器

<div>
    <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" />
         <asp:RequiredFieldValidator runat="server" ID="passwordRequiredValidator"
                                     ControlToValidate="txtPassword"
                                     ValidationGroup="PublishPassValidation"
                                     ErrorMessage="Password is required."  />    
    </div>    
</div>
<div>
    <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
</div>
<asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation"
                      ControlToValidate="txtConfirmPassword"
                      ControlToCompare="txPassword" runat="server"
                      ErrorMessage="Passwords do not match">
</asp:CompareValidator>


请为验证器张贴您的标记。请为验证器张贴您的标记。RFV已添加到两个框中,我接受了您的建议。坦率地说,这是次优的(因为行为仍然存在,只是不太可能被看到),但这是一件非常次要的事情,应该让QA测试人员满意。RFV被添加到两个框中,我接受了你的建议。坦率地说,这是次优的(因为行为仍然存在,只是不太可能被看到),但这是一件非常次要的事情,应该让QA测试人员满意。