# Textbox in einem Repeater war nach dem Postback leer

**URL:** https://entwicklergate.de/t/textbox-in-einem-repeater-war-nach-dem-postback-leer/133
**Category:** ASP.NET
**Tags:** webforms, asp.net
**Created:** [6. Mai 2016 um 12:35 UTC](https://entwicklergate.de/t/textbox-in-einem-repeater-war-nach-dem-postback-leer/133 "2016-05-06T12:35:45Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![UweKeim](https://entwicklergate.de/user_avatar/entwicklergate.de/uwekeim/32/432_2.png) [@UweKeim](https://entwicklergate.de/u/UweKeim)
#### Post date: [6. Mai 2016 um 12:35 UTC](https://entwicklergate.de/t/textbox-in-einem-repeater-war-nach-dem-postback-leer/133/1 "2016-05-06T12:35:45Z")

</div>

Das hat mich ein paar Stunden gekostet:

Ich hatte ein `Repeater`-Steuerelement auf einer ASPX-Seite. In dem Repeater habe ich verschiedene Eingabefelder angezeigt (Textfeld, Auswahlliste, Kontrollkästchen, usw.).

Nach dem Postback der Seite, war jedoch der Inhalt immer leer; alle zuvor vom Benutzer gemachten Eingaben waren weg.

### Grundsätzliche Einbindung des Repeaters

Wichtig ist zunächst, den Repeater nicht erst im `Load`-Ereignis der Seite zu binden, sondern schon früher, im `Init`-Ereignis:

```auto
protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    fillAndBindRepeater();
}

```

Mit der Füllfunktion in der Form:

```auto
private void fillAndBindRepeater()
{
    var ds = new List<CustomFieldInputModel>();

    // ... Liste füllen ...

    FieldsRepeater.DataSource = ds.ToArray();
    FieldsRepeater.DataBind();
}

```

Wichtig ist hier also, _immer_ die Datenquelle zuzuweisen und zu binden, egal ob Postback oder nicht ist.

[Das ist hier gut beschrieben](https://codinglifestyle.wordpress.com/2009/10/08/repeaters-and-lost-data-after-postback-viewstate/#comment-2842).

### Ursache des Problems

Nach viel Try-and-Error habe ich herausgefunden, warum nach dem Postback alle Eingaben weg waren.

Ursache war ein Aufruf von `DataBind()` in der `OnLoad()`-Methode meiner (eigenen) Basisklasse der akuellen ASPX-Seite.

Habe ich den `DataBind()`-Aufruf weggelassen, blieben die Werte erhalten.

### Fehlersuche

Hilfreich war für mich, in meiner ASPX-Seite folgende Methoden kurzzeitig zu überschreiben:

```auto
public override void DataBind()
{
    base.DataBind();
}

protected override void DataBind(bool raiseOnDataBinding)
{
    base.DataBind(raiseOnDataBinding);
}

protected override void DataBindChildren()
{
    base.DataBindChildren();
}

protected override void OnDataBinding(EventArgs e)
{
    base.OnDataBinding(e);
}

```

Ich habe auf alle 4 Funktionen einen Debugger-Haltepunkt gesetzt und es anschließend im Debugger laufen lassen.

So konnte ich gut sehen, wo das Programm im Callstack war, als er eine der Funktionen aufgerufen hat.
