我有多个aspx页面,它们具有相同的表单控件,用户输入如firstname,lastname,address。
这些字段已经具有必需的,正则表达式和基于长度的客户端验证。现在我需要做的是为这些页面添加一个自定义验证器,它将执行常见的验证。但我不想编辑所有页面,因为它们有数百个。我只想在aspx页面上添加一个自定义验证标签和一个公共服务器端验证函数,它可以分配给aspx页面上的自定义验证器标签,这将节省我的工作。
这些页面很旧,所以我无法将表单更改为用户控件。另外因为每个页面都有不同的CSS。
是否可以编写一个可由多个aspx页面访问的公共服务器端验证器函数?
答案 0 :(得分:0)
您可以通过像这样
扩展CustomValidator类来创建自己的Validatornamespace CustomValidation
{
public class MyValidator : CustomValidator
{
protected override bool OnServerValidate(string value)
{
bool baseresult = base.OnServerValidate(value);
if (baseresult && value == "TestValue")
return true;
return false;
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
}
protected override bool ControlPropertiesValid()
{
return base.ControlPropertiesValid();
}
protected override bool EvaluateIsValid()
{
return base.EvaluateIsValid();
}
}
}
在你的aspx页面中添加控件 -
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<%@ Register TagPrefix="mytag" Namespace="CustomValidation" Assembly="WebApplication1"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<mytag:MyValidator ErrorMessage="Testing" ControlToValidate="txtBox" runat="server" />
<asp:TextBox runat="server" ID="txtBox"></asp:TextBox>
<asp:Button Text="Test Button" runat="server" ID="btnTest" OnClick="btnTest_Click" />
</div>
</form>
</body>
</html>
您的OnServerValidate将在Page.IsValid
上调用namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnTest_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
}
}
}
}