2012-05-28 18 views
5

私はこれまで、ここや他のウェブ上で見つけられたいくつかの異なるソリューションを試しました。たぶんあなたの知識豊富な多くの人が助けることができるかもしれません...asp.netを使ってコントロール(子コントロール付き)を複製/コピーする方法は?

私は、セッション状態でコントロールコレクションとして格納しているユーザーによって動的に作成されたコントロールの束を持っているので、すべてのポストバック。

ユーザーが生成する各コントロールは、内部に他のコントロールを持つ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

私はあなたのrequirmentをはっきりと理解していませんでしたが、クライアントサイドでこれを行うことができれば、jqueryクローンメソッドは良い選択になります。

.clone()メソッドは一致する要素のセットのディープコピーを実行します。つまり、一致した要素だけでなく、その子孫要素およびテキストノードもすべてコピーします。詳細情報については

あなたのアドバイスのためのJquery .clone()

+1

おかげで、私は本当に私のWebメソッドを介してこれを実行する必要があります。 コントロールのクローンを作るのはとても難しいとは思いません! – wotney

関連する問題