Frage

Ich habe 2 steuert erstellt ein Datenobjekt zu manipulieren. 1 für die Anzeige und eine andere für die Bearbeitung

Auf der einen Seite, die ich die „Ansicht“ UserControl laden und Daten, um es auf diese Weise übergeben:

ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);

Das ist alles in Ordnung und in der Steuerung kann ich diese Daten greifen und es angezeigt werden soll.

Jetzt versuche ich, für die Bearbeitung einen ähnlichen Ansatz zu folgen. Ich habe einen anderen User Control für diesen (mit einigen Textfeldern für die Bearbeitung), an den ich die ursprünglichen Daten auf die gleiche Weise gebe ich für die Ansicht tat:

EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);

Welche auch gut funktioniert.

Das Problem besteht nun darin, diese Daten zu bekommen. Wenn der Benutzer auf eine Schaltfläche klickt muss ich die Daten holen, die bearbeitet wurde und mit ihm Sachen zu tun. Was passiert ist, dass, weil die Kontrollen programmatisch hinzugefügt werden, die Daten, dass die geänderte Benutzer nicht zugänglich überall zu sein scheinen.

Gibt es eine Lösung für dieses? Oder ist diese Art und Weise zu versuchen, die Dinge getrennt zu halten und möglicherweise wiederverwendbare nicht möglich?

Vielen Dank im Voraus.

War es hilfreich?

Lösung 3

Hier ist meine Lösung:

In der Seite, halte ich einen Verweis auf das Steuerelement, das programmatisch geladen wird. In der Kontroll habe ich eine GetData () Methode, die vom Benutzer ein Objekt mit den eingegebenen Daten zurückgibt. Wenn der Benutzer das Formular abschickt, die Seite ruft die GetData () -Methode für die Steuerung auf die Daten zuzugreifen den Benutzer eingegeben werden.

Andere Tipps

Halten Sie einfach einen Verweis auf die Steuerung als eine Variable in der Code-Behind-Seite. D.

private EditControl control;

protected void Page_Init(object sender, EventArgs e)
{
   control = (EditControl)LoadControl("EditControl.ascx");
   control.dataToEdit = dataObject;
   this.container.Controls.Add(control);
}

protected void Button_Click(object sender, EventArgs e)
{
   var dataToEdit = control.dataToEdit; 
}

Solange Sie die Steuerung im rechten Teil der Seite des Lebenszyklus sind die Erstellung (Initialisierung), dann wird ViewState aufrechterhalten werden. Ich gehe davon aus dataToEdit ist nur ein TextBox oder etwas?

Steuerelemente dynamisch erstellt wird, muß auf der Seite auf Init oder PreInit Ereignisse hinzugefügt werden.

Sie haben es hier zu tun, weil Kontrollen Zustand ist noch nicht geladen. Wenn Sie die die Kontrolle abgeben zu können werden sie geleert haben, da die Seite bereits Werte Steuerseite gefüllt früh im Lebenszyklus Seite.

Weitere Informationen über Lebenszyklus Seite hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top