我做了一个后台校验的例子(必须是后台校验),目的是想使用AjaxControlToolkit中的ValidatorCalloutExtender。
也就是在点击”保存按钮“的事件中发现输入的Name和Password不正确时候,会各创建一个CustomValidator和一个ValidatorCalloutExtender。
回到客户端后,为什么只有一个第一个ValidatorCalloutExtender有校验错误信息。正常的情况的应该是,当Name和Password都输入错误时,当焦点在Name上时,Name对应的ValidatorCalloutExtender显示校验错误信息。当焦点在Password上时,Password对应的ValidatorCalloutExtender显示错误信息。
现在的问题是只有第一个控件Name显示校验错误信息,焦点到Password上时,Name上的校验信息不会消失,Password的校验信息不会显示出来。aspx代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ValidatorCalloutTest.aspx.cs" Inherits="_Default" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:TextBox ID="tbName" runat="server"></asp:TextBox>
        <br />
        <asp:TextBox ID="tbPSW" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="BtnSave" runat="server" OnClick="BtnSave_Click" Text="保存" />
    </form>
</body>
</html>
cs代码如下:
    protected void BtnSave_Click(object sender, EventArgs e)
    {
        if (this.tbName.Text != "admin")
        {
            CustomValidator customValidator1 = new CustomValidator();
            customValidator1.ID = "MyCustomValidator1";
            customValidator1.ControlToValidate = this.tbName.ID;
            customValidator1.Display = ValidatorDisplay.None;
            customValidator1.ErrorMessage = "您输入的用户名是" + this.tbName.Text + ",不正确!";
            customValidator1.IsValid = false;            this.form1.Controls.Add(customValidator1);            ValidatorCalloutExtender validatorCalloutExtender1 = new ValidatorCalloutExtender();
            validatorCalloutExtender1.ID = "MyValidatorCalloutExtender1";
            validatorCalloutExtender1.TargetControlID = customValidator1.ID;
            this.form1.Controls.Add(validatorCalloutExtender1);        }
        if (this.tbPSW.Text != "admin")
        {
            CustomValidator customValidator2 = new CustomValidator();
            customValidator2.ID = "MyCustomValidator2";
            customValidator2.ControlToValidate = this.tbPSW.ID;
            customValidator2.Display = ValidatorDisplay.None;
            customValidator2.ErrorMessage = "您输入的密码是" + this.tbPSW.Text + ",不正确!";
            customValidator2.IsValid = false;
            this.form1.Controls.Add(customValidator2);            ValidatorCalloutExtender validatorCalloutExtender2 = new ValidatorCalloutExtender();
            validatorCalloutExtender2.ID = "MyValidatorCalloutExtender2";
            validatorCalloutExtender2.TargetControlID = customValidator2.ID;
            this.form1.Controls.Add(validatorCalloutExtender2);
        }
    }