如何使用asp.net克隆/复制控件(带子控件)?

时间:2012-05-28 11:46:36

标签: asp.net vb.net clone dynamic-controls

到目前为止,我已经尝试了在网上和网上其他地方找到的一些不同的解决方案。也许你们中的一位知识渊博的人可能会帮助......

我有一堆由用户动态创建的控件,我将其作为控件集合存储在会话状态中,因此我可以在每次回发时显示它们。

用户生成的每个控件都是div,其中包含其他控件。

我在每个控件上都有一个按钮,允许用户删除控件或复制它。

当用户点击“Duplicate”时,我正在调用处理事件的web方法。

当我的web方法找到要复制的控件时,我想制作该控件的副本并将其添加到页面中(另一个函数处理将其保存到控件集合中(在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

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

不幸的是;启动PropertyInfo.SetValue的行.... 总是错误:

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

当我看到InnerException时:

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

任何人都可以帮助我指出正确的方向让这个工作吗?

感谢阅读!

1 个答案:

答案 0 :(得分:-1)

我并不清楚你的要求,但如果你能在客户端做到这一点,那么jquery clone方法将是一个不错的选择。

.clone()方法执行匹配元素集的深层副本,这意味着它复制匹配的元素及其所有后代元素和文本节点。

了解更多信息Jquery .clone()