ASP.NET / DataItem der DataList ist null nach dem Postback
Nach postback (click auf einen button) in meinem ASP.NET form, alle DataItem meiner form sind null. Warum? Was sollte ich tun, um das abrufen der Inhalte des DataList-auch nach dem postback?
protected void buttonAddRecord_Click(object sender, EventArgs e)
{
foreach (DataListItem item in listFields.Items)
{
//item.DataItem == null WTF?
}
}
protected void Page_Load(object sender, EventArgs e)
{
BindFields();
}
private void BindFields()
{
object setting = MySettings.GetSetting();
if (!Null.IsNull(setting))
{
listFields.DataSource =
DataProvider.GetData(int.Parse(setting.ToString()));
listFields.DataBind();
}
listFields.Visible = listFields.Items.Count > 0;
emptyMessage.Visible = listFields.Items.Count == 0;
}
InformationsquelleAutor asmo | 2010-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand meine Antwort hier.
Genauer gesagt, habe ich ein HiddenField speichern eine ID für Beiträge und ich anfordern von Daten aus der Datenbank, anstatt zu versuchen, es zu bekommen form der DataItem (die können nicht außerhalb verwendet werden die databinding-Ereignis).
HiddenField für mich gearbeitet. Ich bin mit einem repeater und müssen für die Persistenz der Daten aus der Bindung an button klickt.
Das klingt wie ein guter Weg, um doppelt so viele Datenbank-Aufrufe benötigt. Scheint, wie DataList vielleicht ein schlechtes Modell.
Link ist abgelaufen.
InformationsquelleAutor asmo
DataItem
ist nur verfügbar, wenn databinding.Load
kommt vorClick
so sind Sie überschreiben Ihre Daten sowieso.Hierzu:
Sollten Sie eine Datenquelle (wie ObjectDataSource) zu behandeln DataBinding und Update/Insert.
Update /Beratung:
Platzhalter verwenden zum binden von Daten an, die Sie bekommen, selbst in Schwierigkeiten. Sollten Sie erwägen, entweder eine ListView, GridView, DataList oder Repeater. Ich bin sicher, jeder von diesen tun, was Sie wollen, und Sie müssen das Programm weniger. Nutzen Sie Ihre Zeit, Sie zu lernen, anstatt zu versuchen, diese zu arbeiten, seine zum scheitern verurteilt.
Also, was werden Sie setzen in diesen Platzhalter?
Jeder Platzhalter enthält eine Steuerung, wie TextBox, CheckBox, RadioButtonList, DropDownList, etc.. Ich kann nicht wissen, die genaue Art der Steuerung, da die Dynamik. Jeder Platzhalter steht für ein Feld in einem Formular, Z. B. Name, Adresse, E-Mail -, Lieblings-Essen, etc.
Sie haben, um Sie hinzuzufügen auf postback, aber nicht die Daten. Fügen Sie einen booleschen parameter auf Ihre verbindliche Funktion, legen Sie es auf false, wenn postbacking. wenn seine wahre, die Sie hinzufügen, Strg + Daten, wenn die falschen Sie nur hinzufügen, die Steuern und die Daten extrahieren klicken.
Das wird nicht funktionieren, da das DataItem ist nicht zugänglich postback.
InformationsquelleAutor Jeroen
Überprüfen, ob Sie wirklich DataBind() DataList nach jedem postback. In der Regel werden die DataList, GridView, DropDownList (und andere Steuerelemente) leer, nach einem PostBack, wenn Sie nicht binden Sie Sie wieder ein.
InformationsquelleAutor Niike2