ASP.Net: User Steuerelemente hinzugefügt dynamisch Platzhalter können nicht Werte abrufen

StackOverflow https://stackoverflow.com/questions/102483

  •  01-07-2019
  •  | 
  •  

Frage

Ich füge einige Benutzer Steuerelemente dynamisch auf einen Platzhalter Server-Steuerung. Meine Benutzersteuerung besteht aus einigen Labels und einigen Textboxsteuerelemente.

Wenn ich das Formular aus und versuche, den Inhalt der Textfelder zu betrachten (in jeder Benutzerkontrolle) auf dem Server, sind sie leer.

Wenn der Postback abgeschlossen ist, haben die Textfelder, die Daten, die ich vor dem Postback eingegeben. Das sagt mir, dass der Text in den Feldern wird durch Viewstate beibehalten. Ich weiß einfach nicht, warum ich kann sie nicht finden, wenn ich das Debuggen.

Kann mir bitte jemand sagen, warum ich nicht die Daten zu sehen, kann der Benutzer auf dem Server eingegeben?

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Dies basiert auf .NET v1 Ereignisfolge, aber es sollte Ihnen die Idee geben:

  • Initialisieren (Init-Ereignis)
  • Begin Tracking-View State (prüft, ob Postbacks)
    • Last View State (wenn Postbacks)
    • Laden Postback-Daten (wenn Postbacks)
  • Load (Load-Ereignis)
    • Raise Changed Ereignisse (wenn Postbacks)
    • Raise Postback-Events (wenn Postbacks)
  • PreRender (PreRender Ereignis)
  • Save View State
  • Render
  • Unload (Unload-Ereignis)
  • Entsorgen

Wie Sie sehen können, geschieht das Laden von Daten zurück Viewstate zu den Kontrollen vor dem Load-Ereignis. Also, um für Ihren dynamisch hinzugefügte Steuerelemente diese Werte zu „behalten“, sie müssen vorhanden für die ASP.NET-Seite der Werte in erster Linie neu zu laden. Sie würden diese Kontrollen in der Init-Phase neu erstellen müssen, bevor Last View State auftritt.

Andere Tipps

dachte ich gestern darauf hin, dass Sie tatsächlich Ihre Anwendung arbeiten wie normale durch das Laden des Steuerbaum direkt nach dem loadviewstateevent abgefeuert wird machen können. wenn Sie die Loadviewstate-Ereignis überschreiben, rufen mybase.loadviewstate und dann Ihren eigenen Code setzen, um die Kontrollen direkt nach dem es zu regenerieren, sind die Werte für diese Kontrollen werden beim Laden der Seite zur Verfügung. In einem meiner apps benutze ich ein Ansichtszustand Feld die ID oder die Array-Informationen zu halten, die verwendet werden können, um diese Kontrollen neu erstellen.

Protected Overrides Sub LoadViewState(ByVal savedState As Object)
    MyBase.LoadViewState(savedState)
    If IsPostBack Then
        CreateMyControls()
    End If
End Sub

Ich glaube, Sie müssen das Benutzersteuerelement auf den Platzhalter während der Init-Phase des Lebenszyklus der Seite, um hinzuzufügen, um die Viewstate zu erhalten, indem die Ladephase gefüllt werden, um diese Werte zu lesen. Ist dies die Reihenfolge, in der Sie laden die?

Stellen Sie sicher, Sie dynamische Steuerelemente auf Klassenebene definieren und das Hinzufügen von ihnen zu den ASP-Containern:

Private dynControl As ASP.MyNamespace_MyControl_ascx

Und wenn Sie das Steuerelement instanziiert, stellen Sie sicher, Loadcontrol aufrufen, um das Objekt hinzugefügt wird richtig:

dynControl = CType(LoadControl("~/MyNamespace/MyControl/MyControl.ascx"), ASP.MyNamespace_MyControl_ascx)

Sie haben Ihre Kontrollen im Page_PreInit Ereignishandler erstellen. Das ASP.NET Server-Steuermodell ist schwierig; Sie müssen vollständig die Seite Lifecycle rel="nofollow es richtig zu machen.

Wie bereits gesagt wurde, muss jede Form der Kontrolle Manipulation durchgeführt werden, bevor Ansichtszustand erstellt wird.

Hier ist ein guter Link auf der Seite Lebenszyklus um Ihnen zu helfen:

http://msdn.microsoft.com/en-us/library /ms178472.aspx

Wir haben das gleiche erlebt und haben es durch die Verwendung Geister behandelt Kontrollen auf page_load, die genau die gleiche .ID haben und dann die Post zurück, die Ereignisse aufgreift und die Daten. Wie schon andere gesagt es die Dynamik ist der Steuer Zugabe nach dem init Stufe, dass der Staat bereits gebaut und Kontrollen hinzugefügt, nachdem nicht gespeichert werden.

Hope, das hilft ein wenig.

Ich möchte auch hinzufügen, dass ich Benutzer steuert die Art und Weise arbeiten gesehen haben, dass man sie nur erwarten würden durch die Control.ID Eigenschaft zur Laufzeit einstellen. Wenn Sie nicht die ID festgelegt, Elemente in einer anderen Reihenfolge bekommen gebaut können und arbeiten seltsam.

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