Tưởng tượng rằng bạn muốn tao 1 webpage mà có cả chức năng login lẫn chức năng tạo mới user. Phần Login sẽ được hiển thị bên cột tay trái, chức năng tạo mới user sẽ được hiển thị bên cột tay phải. Nếu cả 2 phần này đều sử dụng Validator để kiểm tra lỗi. Do đó, việc submit dữ liệu bên phần Login sẽ dẫ đến các Validator bên phần tạo mới user kích hoạt, do đó sẽ sinh ra lỗi nhập liệu từ user, kết quả là bạn không thể login được.
Từ version ASP.NET 2.0 xuất hiện, bạn sẽ không còn bị giới hạn trên nữa. ASP.NET đã cung cấp ý tưởng mới về Validation Group, tức là bạn có thể nhóm các Validator có liên quan với nhau lại thành từng nhóm. Trong ví dụ sau, web page của bạn có chứa cả phần Login và phần đăng ký mới user và những Validator để kiểm tra lỗi nhập liệu.
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<style type="text/css">
html
{
background-color:silver;
}
.column
{
float:left;
width:300px;
margin-left:10px;
background-color:white;
border:solid 1px black;
padding:10px;
}
</style>
<title>Show Validation Groups</title>
</head>
<body>
<form id="form1" runat="server">
<div class="column">
<fieldset>
<legend>Login</legend>
<p>
Please log in to our Website.
</p>
<asp:Label
id="lblUserName"
Text="User Name:"
AssociatedControlID="txtUserName"
Runat="server" />
<br />
<asp:TextBox
id="txtUserName"
Runat="server" />
<asp:RequiredFieldValidator
id="reqUserName"
ControlToValidate="txtUserName"
Text="(Required)"
ValidationGroup="LoginGroup"
Runat="server" />
<br /><br />
<asp:Label
id="lblPassword"
Text="Password:"
AssociatedControlID="txtPassword"
Runat="server" />
<br />
<asp:TextBox
id="txtPassword"
TextMode="Password"
Runat="server" />
<asp:RequiredFieldValidator
id="reqPassword"
ControlToValidate="txtPassword"
Text="(Required)"
ValidationGroup="LoginGroup"
Runat="server" />
<br /><br />
<asp:Button
id="btnLogin"
Text="Login"
ValidationGroup="LoginGroup"
Runat="server" OnClick="btnLogin_Click" />
</fieldset>
<asp:Label
id="lblLoginResult"
Runat="server" />
</div>
<div class="column">
<fieldset>
<legend>Register</legend>
<p>
If you do not have a User Name, please
register at our Website.
</p>
<asp:Label
id="lblFirstName"
Text="First Name:"
AssociatedControlID="txtFirstName"
Runat="server" />
<br />
<asp:TextBox
id="txtFirstName"
Runat="server" />
<asp:RequiredFieldValidator
id="reqFirstName"
ControlToValidate="txtFirstName"
Text="(Required)"
ValidationGroup="RegisterGroup"
Runat="server" />
<br /><br />
<asp:Label
id="lblLastName"
Text="Last Name:"
AssociatedControlID="txtLastName"
Runat="server" />
<br />
<asp:TextBox
id="txtLastName"
Runat="server" />
<asp:RequiredFieldValidator
id="reqLastName"
ControlToValidate="txtLastName"
Text="(Required)"
ValidationGroup="RegisterGroup"
Runat="server" />
<br /><br />
<asp:Button
id="btnRegister"
Text="Register"
ValidationGroup="RegisterGroup"
Runat="server" OnClick="btnRegister_Click" />
</fieldset>
<asp:Label
id="lblRegisterResult"
Runat="server" />
</div>
</form>
</body>
</html>
protected void btnRegister_Click(object sender, EventArgs e)
{
if (Page.IsValid)
lblRegisterResult.Text = "Registration successful!";
}
protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
lblLoginResult.Text = "Log in successful!";
}
Tất cả các Validator và Button đều có thuộc tính ValidationGroup. Những control nào nằm trong phần login sẽ được thiết lập giá trị “LoginGroup” cho thuộc tính ValidationGroup. Những control trong phần đăng ký mới user sẽ được thiết lập giá trị “RegisterGroup” cho thuộc tính ValidationGroup.
Bởi vì những control này được chia thành 2 nhóm khác nhau, bạn có thể submit 1 nhóm này hoàn toàn độc lập nhau. Submit dữ liệu từ phần Login sẽ không kích hoạt những Validation control trong phần đăng ký mới user.