3 Stimmen

ASP.NET: Wie kann man die Hintergrundfarbe eines Steuerelements ändern, das die Validierung nicht bestanden hat?

Nehmen wir die folgende einfache Website als Beispiel:

<asp:TextBox id="TextBox1" 
runat="server"></asp:TextBox>
&nbsp; 
<asp:RequiredFieldValidator 
id="RequiredFieldValidator1" runat="server" 
ErrorMessage="Required!" 
ControlToValidate="TextBox1">
</asp:RequiredFieldValidator>

Ich würde mir wünschen, dass die TextBox1 zu ändern. BackColor auf gelb, wenn die Validierung fehlgeschlagen ist. Gibt es eine einfache Möglichkeit, dies zu erreichen?

5voto

Rich Punkte 35534

Page.Validators ist eine ValidatorCollection. Sie können diese Sammlung iterieren, indem Sie jedes Mitglied auf BaseValidator casten. Prüfen Sie BaseValidator.IsValid und holen Sie den Namen des Steuerelements aus BaseValidator.ControlToValidate. Verwenden Sie this.FindControl(control name), um einen Verweis auf das Steuerelement zu erhalten (dies gibt ein Control-Objekt zurück). Führen Sie die erforderliche Typüberprüfung und das Casting durch, und wenn Sie das Steuerelement in TextBox oder ein anderes Steuerelement umwandeln können, das die Eigenschaft BackColor enthält, wandeln Sie es um und setzen Sie die BackColor.

Hier ist eine vereinfachte Version:

   private void setInvalidControlsBackColor()
    {
        Control c;
        TextBox t;
        foreach (BaseValidator v in Page.Validators)
        {
            if (!v.IsValid)
            {
                c = (Control)this.FindControl(v.ControlToValidate);
                // check the type, make sure you can cast this...
                t = (TextBox)c;
                t.BackColor = Color.Yellow;
                // or however else you want to handle this...
            }
        }
    }

Der Grund, warum ich keinen Code für die Typüberprüfung einfüge, liegt darin, dass Sie die verschiedenen Steuerelementtypen möglicherweise anders behandeln möchten usw. Auch wenn Sie die ToolTip-Felder nicht für Ihre Validatoren verwenden, können Sie dieses Feld verwenden, um zusätzliche Informationen zu speichern (ähnlich wie die Eigenschaft Tag). Das könnte als hässliche Praxis angesehen werden, aber es ist für Sie da, wenn Sie es brauchen... kann als Hinweis darauf verwendet werden, was mit gültigen/ungültigen Zuständen zu tun ist.

1voto

Albert Punkte 1003

Eine bessere Option wäre, von den Systemvalidatoren zu erben und eigene Validatoren zu erstellen. Sie können das Standardverhalten außer Kraft setzen, um die Hintergrundfarbe des Feldes ControlToValidate zu ändern. Bei den meisten Steuerelementen brauchen Sie den Typ nicht zu überprüfen, Sie können einfach den Stilwert auf "background-color:yellow" setzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X