我做了一个后台校验的例子(必须是后台校验),目的是想使用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);
}
}
也就是在点击”保存按钮“的事件中发现输入的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);
}
}
鬱悶