方法 : ASP.NET サーバー コントロールをプログラムで検証する

更新 : 2007 年 11 月

既定では、ASP.NET 検証コントロールは、ページがサーバーにポストバックされるとき (つまり、ビューステートおよびポストバック データが処理された後)、およびイベント処理コードを呼び出す前に自動的に検証を実行します。また、検証コントロールは、ブラウザがクライアント スクリプトをサポートしている場合は、ブラウザ内で検証を実行する場合もあります。

ただし、プログラムで検証を実行することが必要な場合もあります。プログラムにより検証を実行するケースとしては、次のような状況があります。

  • 検証値が実行時まで設定されない場合。たとえば、RangeValidator コントロールを使用する場合、MinimumValue プロパティと MaximumValue プロパティは、ユーザーが入力した値に基づいて実行時に設定します。この場合、既定の検証は正しく機能しません。検証を実行するための検証コントロールがページによって呼び出されるとき、RangeValidator コントロールに十分な情報が存在しないためです。

  • Page_Load イベント ハンドラでコントロール (またはページ全体) の有効性を確認する場合。ページ処理の段階では、検証コントロールは起動されていません。したがって、ページまたは各コントロールの IsValid プロパティは設定されません (このプロパティの値を取得しようとすると例外がスローされます)。ただし、有効性を確認する場合は、プログラムにより検証を呼び出すことができます。

  • 実行時にコントロール (入力コントロールまたは検証コントロール) を追加する場合。

検証を実行するタイミングを正確に制御する必要がある場合は、プログラムによる検証を行う方法がより一般的です。

hxet6xwx.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

既定では、ASP.NET Web ページは、悪意のあるユーザーがアプリケーションにスクリプトまたは HTML 要素を送信しようとしていないかどうかを自動的に検証します。この機能を無効にしてある場合は、ValidateInput メソッドを自分で呼び出すことができます。詳細については、「スクリプトによる攻略の概要」を参照してください。

プログラムによって検証を行うには

  • 検証コントロールの Validate メソッドを呼び出します。

    このコントロールが検証を実行し、コントロールの IsValid プロパティとページを設定します。エラーが検出された場合は、ページがユーザーに返されるときに、通常どおりにエラー メッセージが表示されます。

    プログラムによりプロパティを設定する方法のコード例を次に示します。この例では、ASP.NET Web ページは滞在中の無料ツアーを目玉とするリゾートの予約を受け付けます。ユーザーは到着日と出発日を入力してから、滞在時のツアーをスケジューリングする必要があります。ユーザーが通常の日付形式で入力し、ツアーの日程が到着日と出発日の範囲内に収まるように、RangeValidator コントロールが使用されます。

    hxet6xwx.alert_note(ja-jp,VS.90).gifメモ :

    日付に変換できない値をユーザーが入力すると、検証コントロールは例外をスローします。わかりやすくするために、この例にはエラー処理は記述されていません。

    到着日と出発日は、ページ上の 2 つの TextBox Web サーバー コントロール (txtArrival および txtDeparture) から取得されます。ツアーの日程は、第 3 の TextBox コントロール (txtTourDate) に入力され、RangeValidator コントロールによって検証されます。

    hxet6xwx.alert_note(ja-jp,VS.90).gifメモ :

    プログラムにより検証を行う場合は、クライアント スクリプトを無効にし、サーバー側の検証コードが実行される前に間違ったエラー メッセージがコントロールに表示されないように配慮する必要があります。詳細については、「方法 : 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.";
        }
    }
    

参照

概念

ASP.NET サーバー コントロールの検証の種類

その他の技術情報

検証 ASP.NET コントロール