2015-06-19 11 views
5

Cố gắng di chuyển điều khiển tùy chỉnh chung sang thư viện lớp mới (cũng đã thử một dự án web mới), để các dự án khác có thể sử dụng nó, nhưng thuộc tính của nó là luôn luôn NULL khi được sử dụng trong một dự án khác. Tìm kiếm các câu hỏi tương tự không may không giúp giải quyết vấn đề của tôi.Kiểm soát người dùng Asp.NET được tham chiếu từ dự án khác/dll có thuộc tính NULL

tôi đăng ký điều khiển mới trong web.base.config của chúng tôi để dự án-A

<add tagPrefix="Controls" namespace="Comp.UserWebControls.Controls" assembly="Comp.UserWebControls" /> 

Các Comp.UserWebControls được thêm vào như một tài liệu tham khảo dự án tại dự án-A (Tôi cũng đã cố gắng thêm build dll như một tài liệu tham khảo trong dự án-A, không có sự khác biệt)

Các đánh dấu trông giống như

<asp:Content ID="Content4" ContentPlaceHolderID="RightPlaceHolder" runat="server"> 
<Controls:uxMyControl ID="TestingThing" runat="server" /> 

Trong mã phía sau, điều khiển "TestingThing" được khởi tạo, nhưng tất cả các thuộc tính đều rỗng (Nhãn, hộp văn bản, v.v.)

Thông thường, nếu điều khiển nằm trong cùng một dự án (Dự án-A) thì tôi sẽ đăng ký sự kiểm soát như thế này:

<add tagPrefix="Contols" tagName="uxMyControl" src="~/Controls/uxMyControl.ascx"/> 

Và trong đối tượng điều khiển mã hóa trông ổn, các thuộc tính được khởi tạo và hoạt động như mong đợi.

Tôi không thể làm src="myPath" khi sử dụng một bộ phận để tôi nghĩ rằng có điều gì đó liên quan đến nó.

Làm cách nào tôi có thể tách riêng bộ điều khiển này thành lắp ráp/dự án/giải pháp mới để các dự án khác có thể sử dụng nó.

Mọi trợ giúp sẽ được đánh giá cao cảm ơn!

+0

Bạn đã bao gồm tệp '.ascx' chính nó vào dự án khác mà bạn muốn sử dụng điều khiển tùy chỉnh? –

+0

Chuỗi SO này có thể giúp bạn - http://stackoverflow.com/questions/709617/using-user-controls-from-other-projects-in-asp http://stackoverflow.com/questions/10340610/asp -net-user-control-instance-is-null-khi-tham chiếu-trên-trang-tải-trên-trang-mã –

+0

@ChandanRoy - Yup tôi di chuyển toàn bộ điều khiển người dùng đến dự án mới. Hãy kiểm tra liên kết đó nhờ – Jerrold

Trả lời

2

Tôi không nghĩ rằng bạn có thể chụp User Control (ví dụ: tệp .ascx) và đặt nó vào thư viện lớp học để chia sẻ giữa các ứng dụng khác nhau.

Thay vào đó, bạn cần viết Custom Control. Về cơ bản, đây là một lớp (một tệp .cs đơn, không có liên kết ascx) có nguồn gốc từ Control (hoặc biến thể của Control - ví dụ: bạn có thể lấy được từ DropDownList nếu bạn muốn thực hiện kiểm soát danh sách thả xuống tùy chỉnh của riêng mình).

Sự khác biệt: https://msdn.microsoft.com/en-us/library/aa651710(v=vs.71).aspx

Có một bài viết MSDN ở đây: https://msdn.microsoft.com/en-us/library/aa479318.aspx mà thảo luận về cách bạn sẽ tạo một Custom Control từ một User Control nếu bạn không cảm thấy rất thoải mái với ý tưởng của nó.

Nó vạch ra các bước như sau:

  1. Viết điều khiển người dùng của bạn như bình thường, thường bằng cách sử dụng thiết kế Visual Studio .
  2. Kiểm tra bằng một trang đơn giản trước khi thử triển khai .
  3. Triển khai ứng dụng để biên dịch trước nó.
  4. Lấy người dùng lắp ráp của bộ điều khiển được tạo ra bởi bước triển khai và bạn đang thực hiện về cơ bản: Bạn có quyền kiểm soát tùy chỉnh của mình.
  5. Cuối cùng, hãy sử dụng điều khiển tùy chỉnh của bạn trong các ứng dụng khác giống như cách bạn luôn sử dụng các điều khiển tùy chỉnh .

Nếu bạn muốn có một bộ sưu tập các điều khiển và không muốn một DLL riêng biệt cho mỗi, sau đó bạn có thể sử dụng một decompiler như Reflector để nhìn vào những gì đang được tạo ra và chỉ cần sao chép/dán nó vào thư viện lớp học của các điều khiển được chia sẻ.

Sau đó, bạn sẽ có thể đăng ký tagPrefix và namespace như bạn đã thấy: <add tagPrefix="Controls" namespace="Comp.UserWebControls.Controls" assembly="Comp.UserWebControls" />

và bạn nên sẵn sàng để đi.

Nếu điều khiển người dùng không phức tạp, thì có lẽ tôi sẽ bị cám dỗ đọc về mã thuần túy Custom Controls và thử và viết nó như thế thay vì cố gắng lấy và dịch ngược một DLL.

Tôi nghĩ lý do bạn nhận được các giá trị null trở lại rất có thể là điều gì đó cần làm với vòng đời của trang và xem. Điều này luôn luôn là điều tôi vật lộn với hầu hết trong các biểu mẫu Web, đặc biệt là các điều khiển được nạp động, tìm ra nơi trong vòng đời bạn cho là tải chúng. Tôi dường như nhớ lại rằng nếu bạn đã thêm chúng một cách năng động trong ví dụ Page_Load, chúng luôn có vẻ hoạt động nhưng sau đó không bao giờ tồn tại các giá trị trên postback, nhưng sau đó Page_Init hoạt động tốt. Vì vậy, tôi sẽ nói - tạo một Custom Control, một tập tin lớp duy nhất để kiểm soát người dùng, loại bỏ bất kỳ dấu vết nào của .ascx và bạn nên làm tốt.

+0

Cảm ơn nhiều - Tôi đã bỏ qua ý tưởng này vì tôi không muốn quay bánh xe quá lâu và quay lại sao chép/dán trang vào 2 dự án. Hy vọng rằng bệnh có thời gian để xem xét lại và tái cấu trúc trong tương lai .. cảm ơn cho câu trả lời ngắn gọn. Tôi hy vọng những người khác có cùng một vấn đề có thể xác minh. Sẽ đánh dấu cái này là chính xác nhất. – Jerrold

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