<%@ Page ContentType="text/html" Language="VB" %>
<script runat="Server">
Sub start_Click(sender As Object, e As EventArgs)
' 検証コントロール割り当てのメソッドを呼び出し
ValidMapping(sender)
' 検証処理を実行
Page.Validate()
If Page.IsValid Then
' 検証に成功した場合の処理
End If
End Sub
Sub stop_Click(sender As Object, e As EventArgs)
' 検証コントロール割り当てのメソッドを呼び出し
ValidMapping(sender)
' 検証処理を実行
Page.Validate()
If Page.IsValid Then
' 検証に成功した場合の処理
End If
End Sub
Sub ValidMapping(sender As Object)
Dim objSnd As WebControl = CType(sender,WebControl)
' フォーム内に含まれる検証コントロールを順に取得
Dim objEnm As IEnumerator=Page.Validators.GetEnumerator()
Do While objEnm.MoveNext()
Dim objVal As BaseValidator=CType(objEnm.Current,BaseValidator) ' 検証コントロールのIDが ' 「<イベント発生元コントロールのID>_」で ' 始まっている場合には有効化し、 ' それ以外のものは無効にする If objVal.ID.StartsWith(objSnd.ID & "_") Then objVal.Enabled=True Else objVal.Enabled=False End If
Loop
End Sub
</script>
<html>
<head>
<title>検証コントロールのグルーピング</title>
</head>
<body>
<form runat="server">
<h1>メールニュース 購読開始</h1>
名前:
<asp:TextBox id="txtNam" runat="Server" Size="20" />
<asp:RequiredFieldValidator id="start_nam" runat="Server"
ControlToValidate="txtNam" Enabled="False" EnableClientScript="False"
ErrorMessage="名前は必須入力です。" />
<br />
E-Mail:
<asp:TextBox id="txtEmail" runat="Server" Size="50" />
<asp:RequiredFieldValidator id="start_email" runat="Server"
ControlToValidate="txtEmail" Enabled="False" EnableClientScript="False"
ErrorMessage="E-Mailは必須入力です。" />
<br />
<asp:Button id="start" runat="Server" Text="購読開始"
OnClick="start_Click" />
<hr />
<h1>メールニュース 購読取消</h1>
E-Mail:
<asp:TextBox id="txtEmail2" runat="Server" Size="50" />
<asp:RequiredFieldValidator id="stop_email" runat="Server"
ControlToValidate="txtEmail2" Enabled="False" EnableClientScript="False"
ErrorMessage="E-Mailは必須入力です。" /><br />
<asp:Button id="stop" runat="Server" Text="購読取消"
OnClick="stop_Click" />
</form>
</body>
</html>
ASP.NET 1.xの検証コントロールには、ボタン系コントロールとの関連付けを行うための専用のプロパティは用意されていない。そこで、本稿ではIDプロパティの値を利用してひも付けを行っている。ValidMappingメソッドの中身をご覧いただけば分かるように、本サンプルでは、検証コントロールのIDが「<イベント発生元コントロールのID>_」で始まっている場合に、これを現在のイベントで処理すべき検証コントロールであると見なしている。