2012-05-28 18 views
5

Ich habe ein paar verschiedene Lösungen hier und anderswo im Internet ohne Glück bisher versucht. Vielleicht kann einer von Ihnen wissen viel Los kann helfen ...Wie klonen/kopieren Sie ein Steuerelement (mit untergeordneten Steuerelementen) mit asp.net?

Ich habe eine Reihe von dynamisch erstellten Steuerelemente vom Benutzer, die ich als Steuerelement Sammlung im Sitzungszustand speichern, so dass ich sie auf jedem Postback anzeigen können .

Jedes Steuerelement, das der Benutzer generiert, ist ein div mit anderen Steuerelementen darin.

Ich habe eine Schaltfläche auf jedem Steuerelement, mit dem der Benutzer entweder das Steuerelement löschen oder duplizieren kann.

Wenn der Benutzer auf "Duplicate" klickt, rufe ich meine Webmethode auf, die das Ereignis behandelt.

Wenn meine Web-Methode die Steuerung dupliziert werden findet, ich möchte eine Kopie dieser Kontrolle machen und es auf die Seite (eine andere Funktion Angebote hinzufügen, damit die Steuer Sammlung speichern (auf Page_Unload)

Dim DupCtrl As Control = Nothing 

     Dim int As Integer = myDynControls.Count 
     For i = 0 To int - 1 

      If myDynControls(i).ID.Contains(ctrlID) Then 
       DupCtrl = Clone_Control(myDynControls(i)) 
       Exit For 
      End If 

     Next 
End Function 

Und die Clone_Control Funktion:

Public Shared Function Clone_Control(OriginalControl As Object) As Object 

    Dim type As Type = OriginalControl.[GetType]() 
    Dim properties As Reflection.PropertyInfo() = type.GetProperties() 
    Dim retObject As [Object] = type.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, Nothing, OriginalControl, Nothing) 
    For Each propertyInfo As Reflection.PropertyInfo In properties 
     If propertyInfo.CanWrite Then 
      propertyInfo.SetValue(retObject, propertyInfo.GetValue(OriginalControl, Nothing), Nothing) 
     End If 
    Next 
    Return retObject 
End Function 

Leider, die Linie, die PropertyInfo.SetValue beginnt .... immer Fehler mit:

"Exception has been thrown by the target of an invocation." 

und wenn ich mir die Innerexception:

"Cannot get inner content of dynDiv_FormCtrl_Wrapper_10432 because the contents are not literal." 

Kann jemand bitte in die richtige Richtung zeigen mir helfen, diese Funktion zu erhalten?

Danke fürs Lesen!

Antwort

-1

Ich habe Ihr Requirment nicht klar verstanden, aber wenn Sie dies auf der Client-Seite tun können, dann wäre die Jquery-Klon-Methode eine gute Wahl.

Die .clone() - Methode führt eine tiefe Kopie der Menge übereinstimmender Elemente durch, dh sie kopiert die übereinstimmenden Elemente sowie alle ihre untergeordneten Elemente und Textknoten.

Für weitere Informationen Jquery .clone()

+1

Vielen Dank für Ihre Ratschläge, aber ich brauche das wirklich über meine Web-Methode zu tun. Ich kann nicht glauben, dass es so schwierig ist, einfach einen Klon einer Kontrolle zu machen! – wotney