4

テキストボックスに入力されたテキストがデータベースの特定のフィールドと一致するかどうかをチェックする CustomValidator があります。これは以前はすべてうまく機能していましたが、それ以来ページをかなり変更したため、機能しなくなりました。これに影響を与えるような変更を加えたとは思いませんでしたが、変更したようです。他のすべてのバリデーター (必須フィールド バリデーター) は正常に動作していますが、CustomValidator が応答しません。

とにかく、ここに私のコードがあります:

CustomValidator:

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtCoursePrefix" ErrorMessage="Course number is already taken."></asp:CustomValidator>

VB コードビハインド:

Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate

    'Checking for duplicate course numbers

    'get values
    Dim checkPrefix = txtCoursePrefix.Text
    Dim checkNum = txtCourseNum.Text

    'db connectivity
    Dim myConn As New OleDbConnection
    myConn.ConnectionString = AccessDataSource2.ConnectionString
    myConn.Open()

    'select records
    Dim mySelect As New OleDbCommand("SELECT 1 FROM tableCourse WHERE prefix=? AND course_number=?", myConn)
    mySelect.Parameters.AddWithValue("@checkPrefix", checkPrefix)
    mySelect.Parameters.AddWithValue("@checkNum", checkNum)

    'execute(Command)
    Dim myValue = mySelect.ExecuteScalar()

    'check if record exists
    If myValue IsNot Nothing Then
        CustomValidator1.SetFocusOnError = True
        args.IsValid = False
    End If

End Sub

CustomValidator1.SetFocusOnError = True および args.IsValid = False になるまで、すべてが機能しています。If ステートメントをテストしたところ、正しく動作しており、true が返され、その中に入れたものはすべて実行されます。

4

5 に答える 5

8

customvalidators を使用する際に知っておくべきこと:

を使用して検証する場合はValidationGroup、忘れずに に追加してくださいCustomValidator

プロパティを設定しControlToValidateます。

CustomValidatorを設定しない限り、ControlToValidateコントロールが空の場合、コントロールは起動しませんValidateEmptyText=true

使用ClientValidationFunction="customClientValidationFunction"する場合は、次の署名を使用します。

function customClientValidationFunction(sender, arguments) {
   arguments.IsValid = true; //validation goes here
}
于 2012-07-27T09:46:08.520 に答える
3

でプロパティを設定する必要がありValidateEmptyText="true"ますCustomValidator。その場合、クライアント関数とサーバー関数は常に呼び出されます。

それは私にとって問題を解決しました。

于 2012-09-12T11:55:04.620 に答える
1

ハンドラーが呼び出され、args.IsValid を正しく false に設定している場合は、Page.IsValid を false に設定します。しかし、残念ながら、それはフォームの提出を止めるものではありません。あなたがする必要があるのは、フォームの送信を処理するコードの Page.IsValid プロパティをチェックすることです。

したがって、投稿したコードに加えて、正しく機能しているように聞こえますが、送信ハンドラーに次のようなものがあることを確認してください (C# の例):

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (!Page.IsValid)
    {
        // by simply returning, the error message for the CustomValidator will be displayed
        return;
    }
    // do processing for valid form here
}
于 2012-07-01T01:42:08.483 に答える
0

これを使って

OnServerValidate = "CustomValidator1_ServerValidate"

例のように、それは動作します...。

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtCoursePrefix" ErrorMessage="Course number is already taken." OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>

Gaurav Agrawal

于 2011-05-30T12:15:03.093 に答える
0

まず、バリデーターとボタンにバリデーショングループを配置します。それでもうまくいかない場合は、 OnClientClick='CheckValidate();' を入れてください。パラメータとともに page_clientvalidate メソッドを呼び出す関数を宣言します。検証グループ。これは確かにうまくいくでしょう。それが機能しない場合は、javascript メソッドにデバッガーを入れて、同じものをデバッグします。

于 2011-07-30T05:46:18.457 に答える