asp.net dynamisch hinzugefügte Benutzer-Steuerelement speichern von Werten nach dem postback
Hier ist mein Problem. Ich habe ein usercontrol, dass ich möchte, um Benutzern zu erlauben, fügen Sie so viele Instanzen, wie notwendig mit einem button-Klick (jedes mal, wenn ein button angeklickt wird, möchte ich hinzufügen, dass eine weitere Instanz des Benutzersteuerelements auf ein Panel). Es funktioniert gut, das erste mal, aber jeder weitere post zurück, entfernt alle hinzugefügten Steuerelemente. Ich habe kein problem, den überblick über die Zahl der Benutzer steuert ein Benutzer Hinzugefügt hat, aber wie kann ich sicherstellen, dass Sie bleiben im gleichen Zustand, wie Sie vor dem postback? Ich habe einige Beiträge über Menschen mit SaveViewState und LoadViewState aber ich habe nicht in der Lage zu finden, die alle Beispiele.
Mein größtes Problem ist es, sicherzustellen, dass alle Textfelder und dropdownlists von jedem Benutzer die Kontrolle bleibt aufgefüllt, mit dem gleichen text/ausgewählter Wert/Daten nach jedem post wieder
Vielen Dank im Voraus,
Ben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie programmatisch hinzufügen von Steuerelementen zu Ihrer Seite müssen Sie Sie neu erstellen, die auf JEDEM postback.
Außerdem ist es notwendig, dass Sie neu erstellen Sie programmgesteuert hinzufügen von Steuerelementen auf
PreInit
oderInit
- Ereignis der Seite. Dieser ist für die ordnungsgemäße viewstate Wiederherstellung Ereignis-management.Wenn Sie dies nicht tun, Kontrolle verschwunden sein wird postback und Sie nicht behandeln jede Veranstaltung.
BEARBEITEN
Obwohl es wird empfohlen, fügen Sie Steuerelemente dynamisch auf
PreInit
oderInit
es ist wahr (wie Dustin Hodges sagt), dass es kann funktionieren, wenn Sie fügen Sie diese aufpage_load
. Ich würde sagen, Sie sollten es vermeiden, es sei denn, Sie haben keine andere Wahl.Quelle MSDN
dies wird Ihnen helfen,
http://www.codeasp.net/blogs/SumitArora/microsoft-net/841/value-of-dynamic-textbox-lost-on-postback
Lesen Sie diese auch
http://www.codeasp.net/blogs/Vinz/microsoft-net/256/links-to-read-before-working-on-dynamic-controls-in-asp-net
Dank
Asif
Wenn Sie behalten den überblick über die Anzahl der Steuerelemente, die der Benutzer Hinzugefügt hat, müssen Sie erstellen Sie die Steuerelemente, die der Benutzer zuvor Hinzugefügt, vorzugsweise in der Page_Init oder der Page_Load. Fügen Sie so etwas wie dies, dass handler:
Wenn Sie es auf diese Weise, den Zustand der Steuerelemente beibehalten werden sollte, weil, wenn Sie hinzufügen, die tb-Kontrolle zu einer controls-Auflistung, die Sie spielt fangen mit Veranstaltungen und sollte automatisch die Wiederherstellung seiner viewstate.
Sollten Sie nicht haben, um zu verfolgen Ihre Staat in der Sitzung wie in den meisten Fällen wird es gespeichert in der Anzeigestatus für Sie
Ich hatte einen Albtraum von einer Zeit versucht dieses Weg zu ziehen, auf einem alten Projekt. In der zwischen Zeit, habe ich entdeckt, dass ich weiß viel weniger über web-Entwicklung, als ich dachte (Lesen diese website ist eine großartige Möglichkeit, sich zu demütigen, sich täglich-wenn nicht stündlich -- basis). In dieser Projekt-Seite.IsPostBack war völlig nutzlos für mich, da hatte ich die dynamisch erzeugten Steuerelemente.
That being said, die beste Sache, die ich vorschlagen kann, ist zu prüfen, mit der Session-variable. Wenn Sie eine Klasse (oder eine Auflistung einer Klasse), die die Daten darstellt, die Sie erfassen, von der Seite, dann vielleicht, es wäre am einfachsten zum speichern von Werten, die in dieser Klasse/collection zur Verbesserung der Lesbarkeit des Codes, und dann schreiben Sie es in die Mappe.
Blick auf Ihre
PageLoad
und fügen Sieif(!this.IsPostBack)
vor die Linie, wo Sie klar die Systemsteuerung.dies ist natürlich nur eine Vermutung, aber ich habe gesehen, viele Fragen, wo das problem war im Zusammenhang mit diesem.
Ich denke, was passieren wird, wenn Sie klicken Sie auf die Schaltfläche hinzufügen,
Page_Load
feuert das schafft Ihnen eine völlig neue Seite. Klicken Sie dann die Schaltfläche click-Methode fügt das Steuerelement und die Seite fertig Rendern. Wenn Sie darauf klicken, das zweite malPage_Load
schafft Sie Ihre Seite und klicken Sie auf die Schaltfläche Methode wieder schafft ein Steuerelement und fügt es zu der Seite. Leider ist die Seite, die Sie Hinzugefügt, die vorher nicht mehr da ist.Was ist, wenn Sie die zusätzlichen Steuerelemente zu einem Repeater? Der Repeater ist view state verfolgen können jedes Steuerelement, das Sie hinzufügen, so dass Sie auf post-back, es ist nicht weggeblasen.
Es ist eine hässliche Lösung, wenn Sie haben eine Tonne von Nutzern, könnte man aber kleben Sie die Benutzersteuerelemente sich in die Sitzung.
Ich mache das mit meiner Fußzeile des Steuerelements, weil ich nicht wollen, Sie zu schlagen, die db jedes mal die Seite wechselt, um erstellen Sie die Fußzeile.
Diese Lösungen kann man wirklich Multitasking auf dem server wenn Sie viele Benutzer haben und Sie verwenden diese Funktion eine Menge. Zumindest ich denke, es wird...
Aber du kannst einfach wieder Auffüllen Ihre Platzhalter, der hat die Benutzersteuerelemente in page_load. Ich kann ein Beispiel kurz.
Beispiel von dem, was ich Tue:
Wie ein singleton-pattern eine Art...
So wie ich es sehe könnte man dies auf alles, was bewirkt, dass ein postback
Session["DynamicControls"] = Platzhalter.Kontrolliert;
und im page-Load-Methode können Sie:
und wenn das session-Objekt null ist, fügen Sie einfach einen einzigen, wie Sie noch nie da gewesen..
Ich glaube, das wird hängen, um die Daten in die Steuerelemente, wie Sie wollen.