2012-05-28 49 views
5

Tôi đã thử một vài giải pháp khác nhau được tìm thấy ở đây và ở nơi khác trên web mà không cần may mắn cho đến nay. Có thể một trong những bạn hiểu biết nhiều có thể giúp đỡ ...Làm thế nào để sao chép/sao chép một điều khiển (với điều khiển con) bằng cách sử dụng asp.net?

Tôi có một loạt các điều khiển được tạo động bởi người dùng mà tôi đang lưu trữ dưới dạng bộ sưu tập ở trạng thái phiên để tôi có thể hiển thị chúng trên mọi bài đăng .

Mỗi điều khiển mà người dùng tạo là div với các điều khiển khác bên trong nó.

Tôi có một nút trên mỗi điều khiển cho phép người dùng xóa kiểm soát hoặc sao chép nó.

Khi người dùng nhấn "Trùng lặp", tôi đang gọi phương thức web của tôi xử lý sự kiện.

Khi phương pháp web của tôi tìm thấy sự kiểm soát được nhân đôi, tôi muốn tạo một bản sao của điều khiển và thêm nó vào trang (một giao dịch với chức năng lưu nó vào bộ sưu tập điều khiển (trên 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 

Và chức năng 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 

Thật không may, những dòng lệnh bắt đầu PropertyInfo.SetValue .... luôn lỗi với:

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

và khi tôi nhìn vào InnerException:

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

bất cứ ai có thể vui lòng giúp đỡ chỉ cho tôi đi đúng hướng để làm việc này?

Cảm ơn bạn đã đọc!

Trả lời

-1

Tôi không hiểu rõ ràng yêu cầu của bạn, nhưng nếu bạn có thể làm điều này ở phía khách hàng thì phương pháp sao chép jquery sẽ là một lựa chọn tốt.

Phương thức .clone() thực hiện một bản sao sâu của tập hợp các phần tử phù hợp, có nghĩa là nó sao chép các phần tử phù hợp cũng như tất cả các phần tử con cháu và nút văn bản của chúng.

Để biết thêm thông tin Jquery .clone()

+1

Cảm ơn lời khuyên của bạn, nhưng tôi thực sự cần làm điều này thông qua phương pháp web của tôi. Tôi không thể tin rằng nó rất khó để đơn giản là tạo ra một bản sao của một điều khiển! – wotney

Các vấn đề liên quan