教你只用一个Validator对多个控件进行验证
这个技巧是非常有用。如果我们有多个控件,我们只用一个验证控件来验证它 。这将减少页面大小和改善性能,因为每个验证控件在客户端都会被渲染成span,如果一个页面包含上百个控件,就会使得页面非常的庞大臃肿。
在这篇文章的Demo中,动态创建的几个textbox,我只使用一个验证控件去验证它们。
1.aspx页面上:
代码
<body>
<form id="form1" runat="server">
<div>
<asp:CustomValidator ID="CustomValidator1" runat="server" ></asp:CustomValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
</div>
</form>
</body>
<form id="form1" runat="server">
<div>
<asp:CustomValidator ID="CustomValidator1" runat="server" ></asp:CustomValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
</div>
</form>
</body>
2.在服务端将验证控件和TextBox的onfocus事件关联起来:
代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
for (int i = 0; i < 10; i++)
{
TextBox tb = new TextBox();
tb.ID = "tb" + i.ToString();
tb.Attributes.Add("onfocus", "HookUpControl(this,'" + CustomValidator1.ClientID + "')");
Page.Form.Controls.Add(tb);
}
}
}
{
if (!IsPostBack)
{
for (int i = 0; i < 10; i++)
{
TextBox tb = new TextBox();
tb.ID = "tb" + i.ToString();
tb.Attributes.Add("onfocus", "HookUpControl(this,'" + CustomValidator1.ClientID + "')");
Page.Form.Controls.Add(tb);
}
}
}
3.HookUpControl函数如下:
代码
function HookUpControl(curObj, validatorClientID)
{
var validationControl = document.getElementById(validatorClientID);
validationControl.controltovalidate = curObj.id;
validationControl.clientvalidationfunction = "validatetextbox";
validationControl.validateemptytext = "true";
ValidatorHookupControl(curObj, validationControl);
}
{
var validationControl = document.getElementById(validatorClientID);
validationControl.controltovalidate = curObj.id;
validationControl.clientvalidationfunction = "validatetextbox";
validationControl.validateemptytext = "true";
ValidatorHookupControl(curObj, validationControl);
}
4.客户端的验证函数如下:
代码
function validatetextbox(sender, args)
{
if (args.Value == "")
{
sender.errormessage = "<b>该栏位不能为空。";
sender.innerHTML = "<b>该栏位不能为空。";
args.IsValid = false;
return;
}
if (isNaN(args.Value))
{
sender.errormessage = "<b>该栏位只能是数字。";
sender.innerHTML = "<b>该栏位只能是数字。";
args.IsValid = false;
return;
}
if (Number(args.Value) < 100) {
sender.errormessage = "<b>该栏位的值不能小于100。</b>";
sender.innerHTML = "<b>该栏位的值不能小于100。</b>";
args.IsValid = false;
return;
}
}
{
if (args.Value == "")
{
sender.errormessage = "<b>该栏位不能为空。";
sender.innerHTML = "<b>该栏位不能为空。";
args.IsValid = false;
return;
}
if (isNaN(args.Value))
{
sender.errormessage = "<b>该栏位只能是数字。";
sender.innerHTML = "<b>该栏位只能是数字。";
args.IsValid = false;
return;
}
if (Number(args.Value) < 100) {
sender.errormessage = "<b>该栏位的值不能小于100。</b>";
sender.innerHTML = "<b>该栏位的值不能小于100。</b>";
args.IsValid = false;
return;
}
}
其实主要使用了ValidatorHookupControl(curObj, validationControl)的功能。
在第一个TextBox中输入1,提示:该栏位的值不能小于100。
在第二个TextBox中输入a,提示:该栏位只能是数字。
在第三个TextBox输入值,失去焦点后,再删除,提示:该栏位不能为空。。
onfocus事件可以换成你相应的事件,validatetextbox函数也可以扩展等等。
下载:/Files/jhxk/Other/WebSite1.zip