WebControls ansprechen

aKraus

Erfahrenes Mitglied
Hallo,

ich habe mir selbst einen Validator erstellt. Im Page Load werden, so fern noch kein PostBack stattgefunden hat, sämtliche benötigten Controls und kleinere Informationen zur Validierung übergeben. Soweit - so gut.

Intern habe ich eine Collection, welcher ich die UniqueID des Controls übergebe.
Diese sieht dann ungefähr so aus:

ValidateControls[0].UnqiueID = "TextBox1"
ValidateControls[0].Type = Type.EMail

ValidateControls[1].UnqiueID = "TextBox2"
ValidateControls[1].Type = Type.String


Ich kann dieser Collection die Controls nicht selbst adden, denn sonst würden sie ja nicht mehr in der Collection der Page geaddet sein - oder? Rufe ich jetzt die Funktion zur Validierung auf (i.d.R. beim Speichern), muss ich jetzt sämtliche Controls rekursiv durchlaufen und die Gleichheit der UniqueIDs überprüfen, daraufhin weiß ich erst, ob es sich um das Control handelt. Meine Frage wäre jetzt, ob ich die Controls auch irgendwie anders ansprechen kann OHNE für jede UnqiueID sämtliche Controls der Page zu überprüfen.
 
Natürlich kannst du die Controls ein eine Auflistung deiner Wahl stecken. Aus der Controls-Auflistung fliegen sie deshalb nicht hinaus. Ausserdem bräuchtest du gar keine eigene Collection dafür. Kannst ja ohnehin über die Controls-Collection iterieren.
 
Ich kann ein Object nicht zu zwei Collections hinzufügen. Zumindest ging es mit Framework 1.1 nicht. Würde ich das machen, würde das Object aus der anderen Collection rausfliegen.

Wie meinst du das mit "Controls-Collection iterieren" genau?
 
Moment: Hier gilt es zu unterscheiden:
  • Handelt es sich um eine Controls-Auflistung?
  • Handelt es sich um eine Liste, Hashtable etc.?

In ersterem Fall ist die Sache klar: Das selbe Control kann nur einmal angezeigt werden. Bei einer Änderung würde es zu unterschiedlichen Darstellungen kommen und das wäre wohl ein kleines Problem.

Im zweiteren Fall ist die Geschichte anders: Zu Listen, Hashtables etc. kannst du das Control beliebig hinzufügen. Dort wird es ja auch nicht angezeigt, sondern nur eine Referenz auf das jeweilige Control gehalten. Änderungen am Control sind den Listen egal.

Controls-Auflistung? Naja, sollte im Grunde schon klar sein was das ist, oder? Die Auflistung der anzuzeigenden Controls eines Containers (Page, Panel, etc.)
 
Okay, danke erstmal.

Jetzt habe ich ein weiteres Problem. Da ich die Controls lediglich einmal adden will (Page_Load), muss ich mir die Controls ja irgendwo merken:

Dazu verwende ich folgende Klasse:
Code:
    [Serializable()]
    public class MM_ValidatorItem
    {
        protected WebControl m_Control;
        private MM_Validator.DataType m_Type;
        private bool m_AllowEmpty;

        public MM_ValidatorItem(WebControl Control, MM_Validator.DataType Type)
        {
            m_Control = Control;
            m_Type = Type;
            m_AllowEmpty = false;
        }

        public MM_ValidatorItem(WebControl Control, MM_Validator.DataType Type, bool AllowEmpty)
        {
            m_Control = Control;
            m_Type = Type;
            m_AllowEmpty = AllowEmpty;
        }

        public WebControl Control
        {
            get
            {
                return m_Control;
            }
        }

        public MM_Validator.DataType Type
        {
            get
            {
                return m_Type;
            }
        }

        public bool AllowEmpty
        {
            get
            {
                return m_AllowEmpty;
            }
        }
    }
Im Control nutze ich
Code:
protected Collection<MM_ValidatorItem> InvalidControls = new Collection<MM_ValidatorItem>();
In der SaveViewState Funktion schreibe ich diese Collection in die Session. Daraufhin erhalte ich folgenden Fehler:
Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
 

Neue Beiträge

Zurück