He intentado algunas soluciones diferentes que se encuentran aquí y en otras partes de la web sin suerte hasta el momento. Tal vez uno de ustedes sabe mucho podría ayudar ...Cómo clonar/copiar un control (con controles secundarios) usando asp.net?
Tengo un montón de controles creados dinámicamente por el usuario que estoy almacenando como una colección de control en el estado de la sesión para que pueda mostrarlos en cada devolución .
Cada control que el usuario genera es un div con otros controles dentro de él.
Tengo un botón en cada control que permitirá al usuario eliminar el control o duplicarlo.
Cuando el usuario pulsa "Duplicar" estoy llamando a mi método web que maneja el evento.
Cuando mi método Web se encuentra el control de su copia, quiero hacer una copia de ese control y añadirlo a la página (Otra de las funciones de salvar a la colección de controles (en 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
Y la función 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
Desafortunadamente, la línea que comienza PropertyInfo.SetValue .... siempre con errores:
"Exception has been thrown by the target of an invocation."
y cuando miro el InnerException:
"Cannot get inner content of dynDiv_FormCtrl_Wrapper_10432 because the contents are not literal."
Puede alguien por favor me ayude a apuntar en la dirección correcta para conseguir este trabajo?
¡Gracias por leer!
Gracias por su consejo, pero realmente tengo que hacerlo a través de mi método web. ¡No puedo creer que sea tan difícil simplemente hacer un clon de control! – wotney