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!
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