1

Web フォームで構築された既存の asp.net Web アプリに検証を追加しています。検証する必要がある入力テキスト ボックス コントロールは、サーバー側で動的に作成されます。

テキスト ボックスの作成中に、コントロールを作成してテキスト ボックスの ID にRangeValidator設定することもできます。ControlToValidate

検証が失敗RangeValidatorすると、検証コントロールが配置されている場所にエラー メッセージが表示されます。

しかし、代わりにテキストボックスのborderorbackground-colorを赤に変更します。どうすればそれができますか?

4

4 に答える 4

2

サーバー側とクライアント側の両方でバリデーターにカスタムロジックを追加できます。ヘルプについては、このリンクを確認してください。http://msdn.microsoft.com/en-us/library/f5db6z8k%28v=vs.90%29.aspx

于 2013-09-04T21:14:17.590 に答える
0

色の検証または変更 (またはその両方) のサポートが必要かどうかはわかりませんが、この小さな 2 ボタン アプリを試してみたところ、うまくいくようです。確かに、私は動的なコントロール名を使用しておらず、「testText」がページの最初で唯一の「testText」コントロールであると考えています。コントロールが存在することを確認するために、いくつかの検証を追加することもできます。

    private void button1_Click(object sender, EventArgs e)
    {
        TextBox tb = new TextBox();
        tb.Name = "testText";
        this.Controls.Add(tb);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)this.Controls.Find("testText",true)[0];
        tb.BackColor = System.Drawing.Color.Red; 
    }
于 2013-09-04T19:31:49.887 に答える
0

Irfan が言ったように、カスタム バリデーターを使用して、サーバー検証イベントにロジックを実装できます。ただし、より直接的なアプローチは、ページが有効かどうかを確認し、rangevalidator が有効でないかどうかを確認することです。バリデーターにメッセージを表示させたくない場合は、displaymode を none に設定してください。

if(!Page.IsValid && !myRangeValidator.IsValid)
{
    // simplified, you will need to search for the control in the whole hierarchy
    var ctrlToValidate = Page.FindControl(myRangeValidator.ControlToValidate) as WebControl;
    if(ctrlToValidate != null)
    {
        ctrlToValidate.BorderColor = Color.Red;
    }
}

そうは言っても、私はカスタムバリデーターアプローチを好みます。良いことは、上記のすべてのコードをほぼ再利用できることです。最初の if を削除し、範囲検証を追加し、args.IsValid = false を設定してから、残りのコードを使用します。

于 2013-09-04T23:28:01.390 に答える
0

すべてのバリデーターをループし、特定の CSS クラスをコントロールに追加します。マスター ページを使用しているため、コンテンツ プレースホルダーでコントロールを見つける必要があります。

        const string ErrorCssClass = "error";

        Validate();
        if (IsPostBack && !IsValid)
        {
            var content = Form.FindControl("MainContent") as ContentPlaceHolder;

            foreach (BaseValidator validator in Validators)
            {
                if (validator.IsValid)
                    continue;

                var controlToValidate = content.FindControl(validator.ControlToValidate) as WebControl;
                if (controlToValidate != null && !controlToValidate.CssClass.Contains(ErrorCssClass))
                    controlToValidate.CssClass += " " + ErrorCssClass;
            }
        }
于 2014-02-08T07:19:19.227 に答える