5

ここやウェブ上の他の場所で見つかったいくつかの異なる解決策を試しましたが、これまでのところ運がありません. 詳しい方が助けてくれるかもしれません...

セッション状態にコントロール コレクションとして保存しているユーザーによって動的に作成されたコントロールがたくさんあるので、すべてのポストバックでそれらを表示できます。

ユーザーが生成する各コントロールは、その中に他のコントロールを含む div です。

各コントロールには、ユーザーがコントロールを削除または複製できるボタンがあります。

ユーザーが「複製」を押すと、イベントを処理する 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."

これを機能させるために、誰かが私を正しい方向に向けるのを手伝ってもらえますか?

読んでくれてありがとう !

4

1 に答える 1

-1

私はあなたの要件を明確に理解していませんでしたが、クライアント側でこれを行うことができれば、jquery clone メソッドが良い選択になるでしょう。

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

詳細についてはJquery .clone()

于 2012-05-28T12:18:38.583 に答える