Frage

Ich habe ein benutzerdefiniertes Steuerelement, dass erbt von .NET der Composite Klasse. Diese Steuerung überschreibt die Createchild, um seine untergeordneten Steuerelemente dynamisch zu bauen. Ich brauche die Seite nach ein paar verschiedenen JavaScript-Ereignissen auf der Client-Seite auftreten, um zu Posten zurück.

Um dies zu erreichen, erstelle ich zwei versteckte Steuerelemente auf der Seite, damit ich ihre Werte mit Javascript gesetzt sind, senden die Seite, und die Werte aus auf Server-Seite lesen. Hier ist der Code, den ich verwende diese beiden hiddens zu erstellen:

Protected Overrides Sub CreateChildControls()
    hdEventName = New HiddenField()
    Controls.Add(hdEventName)
    hdEventName.ID = "hdEventName"
    hdEventArgs = New HiddenField()
    Controls.Add(hdEventArgs)
    hdEventArgs.ID = "hdEventValue"
    ' other controls
    ' ...
End Sub

Wenn ein JavaScript-Ereignis auftritt ich den Wert Attribut der beiden hiddens gesetzt und senden Sie die Seite, etwa so:

hdEventName.value = 'EventName';
hdEventArgs.value = 'arg1,arg2';
document.forms[0].submit();

In der OnLoad-Methode meiner Kontrolle, ich versuche, die Value-Eigenschaft der hdEventName und hdEventArgs Kontrollen zu überprüfen, aber es ist immer leer. Allerdings Page.Request.Form (hdEventName.UniqueID) und Page.Request.Form (hdEventArgs.UniqueID) zurückzukehren richtigen Werte. Die eigentliche HTML im Markup auch korrekte Werte, nachdem die Seite Beiträgen zeigt zurück.

Warum ist die Value-Eigenschaft des HtmlInputHiddens vom tatsächlichen Wert getrennt, das erscheint auf dem Client?

Aktualisieren Es scheint, dass eine Kontrolle der Eigenschaften aus der Form irgendwann geladen werden nach OnLoad auftritt. So konnte ich mein Problem entweder durch Bewegen des Codes lösen, dass die Kontrollen die beiden verborgenen Felder in die OnPreRender Methode oder das Hinzufügen der folgenden Methode zu meinem Code -

Private Sub Event_Handler(ByVal sender As Object, ByVal e As EventArgs)
                                          Handles hdEventName.ValueChanged
    ' do stuff with hiddens
    ' ...

    ' reset the values back
    hdEventName.Value = String.Empty
    hdEventArgs.Value = String.Empty
End Sub
War es hilfreich?

Lösung 2

Es scheint, dass eine Kontrolle der Eigenschaften aus der Form irgendwann geladen werden nach OnLoad auftritt. So konnte ich mein Problem entweder durch Bewegen des Codes lösen, dass die Kontrollen die beiden verborgenen Felder in die OnPreRender Methode oder das Hinzufügen der folgenden Methode zu meinem Code -

Private Sub Event_Handler(ByVal sender As Object, ByVal e As EventArgs)
                                      Handles hdEventName.ValueChanged
    ' do stuff with hiddens
    ' ...

    ' reset the values back
    hdEventName.Value = String.Empty
    hdEventArgs.Value = String.Empty
End Sub

Andere Tipps

, wenn die Seite Beiträge gibt es nichts zurück, um die Variable hdEventName an die Steuerung zu verknüpfen Sie zuvor erstellt haben. was Sie tun, ist vergleichbar mit dem einer ganzen Zahl auf der Klassenebene deklariert hat und es bis 5 eingestellt wird, wenn Sie untergeordnete Steuerelemente sind zu schaffen. es gibt nichts, diesen Wert in diesen Variablen über Postbacks zu halten.

Wenn Sie einen Verweis auf die Kontrolle bekommen möchten Sie zuvor erstellt haben, würden Sie

verwenden müssen
hdEventName = CType(Page.FindControl("hdEventName") , HiddenField)

(Ich bin auf dieser erraten) oder anfordern, wenn Sie mit dem Wert betroffen sind.

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