2012-05-28 22 views
5

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!

Respuesta

-1

No entendí claramente su requerimiento, pero si puede hacer esto en el lado del cliente, entonces el método de clonación de jquery sería una buena opción.

El método .clone() realiza una copia profunda del conjunto de elementos coincidentes, lo que significa que copia los elementos coincidentes, así como todos sus elementos descendientes y nodos de texto.

Para obtener más información Jquery .clone()

+1

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

Cuestiones relacionadas