方法 : ASP.NET サーバー コントロールをプログラムで検証する
更新 : 2007 年 11 月
既定では、ASP.NET 検証コントロールは、ページがサーバーにポストバックされるとき (つまり、ビューステートおよびポストバック データが処理された後)、およびイベント処理コードを呼び出す前に自動的に検証を実行します。また、検証コントロールは、ブラウザがクライアント スクリプトをサポートしている場合は、ブラウザ内で検証を実行する場合もあります。
ただし、プログラムで検証を実行することが必要な場合もあります。プログラムにより検証を実行するケースとしては、次のような状況があります。
検証値が実行時まで設定されない場合。たとえば、RangeValidator コントロールを使用する場合、MinimumValue プロパティと MaximumValue プロパティは、ユーザーが入力した値に基づいて実行時に設定します。この場合、既定の検証は正しく機能しません。検証を実行するための検証コントロールがページによって呼び出されるとき、RangeValidator コントロールに十分な情報が存在しないためです。
Page_Load イベント ハンドラでコントロール (またはページ全体) の有効性を確認する場合。ページ処理の段階では、検証コントロールは起動されていません。したがって、ページまたは各コントロールの IsValid プロパティは設定されません (このプロパティの値を取得しようとすると例外がスローされます)。ただし、有効性を確認する場合は、プログラムにより検証を呼び出すことができます。
実行時にコントロール (入力コントロールまたは検証コントロール) を追加する場合。
検証を実行するタイミングを正確に制御する必要がある場合は、プログラムによる検証を行う方法がより一般的です。
セキュリティに関するメモ : |
---|
既定では、ASP.NET Web ページは、悪意のあるユーザーがアプリケーションにスクリプトまたは HTML 要素を送信しようとしていないかどうかを自動的に検証します。この機能を無効にしてある場合は、ValidateInput メソッドを自分で呼び出すことができます。詳細については、「スクリプトによる攻略の概要」を参照してください。 |
プログラムによって検証を行うには
検証コントロールの Validate メソッドを呼び出します。
このコントロールが検証を実行し、コントロールの IsValid プロパティとページを設定します。エラーが検出された場合は、ページがユーザーに返されるときに、通常どおりにエラー メッセージが表示されます。
プログラムによりプロパティを設定する方法のコード例を次に示します。この例では、ASP.NET Web ページは滞在中の無料ツアーを目玉とするリゾートの予約を受け付けます。ユーザーは到着日と出発日を入力してから、滞在時のツアーをスケジューリングする必要があります。ユーザーが通常の日付形式で入力し、ツアーの日程が到着日と出発日の範囲内に収まるように、RangeValidator コントロールが使用されます。
メモ : 日付に変換できない値をユーザーが入力すると、検証コントロールは例外をスローします。わかりやすくするために、この例にはエラー処理は記述されていません。
到着日と出発日は、ページ上の 2 つの TextBox Web サーバー コントロール (txtArrival および txtDeparture) から取得されます。ツアーの日程は、第 3 の TextBox コントロール (txtTourDate) に入力され、RangeValidator コントロールによって検証されます。
メモ : プログラムにより検証を行う場合は、クライアント スクリプトを無効にし、サーバー側の検証コードが実行される前に間違ったエラー メッセージがコントロールに表示されないように配慮する必要があります。詳細については、「方法 : ASP.NET サーバー コントロールの検証を無効にする」を参照してください。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles Button1.Click RangeValidator1.MinimumValue = txtArrival.Text RangeValidator1.MaximumValue = txtDeparture.Text RangeValidator1.Type = ValidationDataType.Date RangeValidator1.Validate() If Not RangeValidator1.IsValid Then RangeValidator1.ErrorMessage = "The tour date must " & _ "fall between the arrival and departure dates." End If End Sub
private void Button1_Click(object sender, System.EventArgs e) { RangeValidator1.MinimumValue = txtArrival.Text; RangeValidator1.MaximumValue = txtDeparture.Text; RangeValidator1.Type = ValidationDataType.Date; RangeValidator1.Validate(); if (!RangeValidator1.IsValid) { RangeValidator1.ErrorMessage = "The tour date must " + "fall between the arrival and departure dates."; } }