2012-05-28 14 views
5

Próbowałem już kilka różnych rozwiązań znalezionych tutaj i gdzie indziej w Internecie bez powodzenia. Być może jedna z twoich kompetentnych partii może być w stanie pomóc ...Jak sklonować/skopiować kontrolkę (z kontrolkami podrzędnymi) za pomocą asp.net?

Mam kilka dynamicznie tworzonych kontrolek przez użytkownika, które przechowuję jako kolekcja kontrolna w stanie sesji, dzięki czemu mogę wyświetlać je przy każdym ogłaszaniu zwrotnym .

Każda kontrolka generowana przez użytkownika jest elementem div z pozostałymi elementami sterującymi.

Mam przycisk na każdej kontrolce, która pozwoli użytkownikowi usunąć kontrolę lub zduplikować ją.

Gdy użytkownik kliknie "Duplikuj", wywołuję moją metodę internetową, która obsługuje wydarzenie.

Kiedy moja metoda internetowej znajdzie kontrola być powielane, chcę zrobić kopię tej kontroli i dodać go do strony (kolejne oferty funkcyjne z zapisaniem go do kolekcji sterowania (na 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 

a funkcja Clone_Control:

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 

Niestety, linia, która rozpoczyna PropertyInfo.SetValue .... zawsze błędy z:

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

i kiedy patrzę na InnerException:

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

Może ktoś Proszę pomóc mi punkt w dobrym kierunku, aby uzyskać tej pracy?

Dzięki za przeczytanie!

Odpowiedz

-1

Nie zrozumiałem wyraźnie twojego żądania, ale jeśli możesz to zrobić po stronie klienta, to metoda klonowania jquery byłaby dobrym wyborem.

Metoda .clone() wykonuje głęboką kopię zestawu dopasowanych elementów, co oznacza, że ​​kopiuje dopasowane elementy, a także wszystkie ich elementy potomne i węzły tekstowe.

Aby uzyskać więcej informacji Jquery .clone()

+1

Dzięki za radę, ale naprawdę trzeba to zrobić za pośrednictwem mojego sposobu internetowej. Nie mogę uwierzyć, że tak trudno jest po prostu zrobić klona kontroli! – wotney

Powiązane problemy