2009-11-19 30 views
10

Có thể tạo các thư viện lớp có chứa UserControls để tôi có thể tái sử dụng chúng không? Nếu vậy, làm thế nào? Là đánh dấu biên dịch với các .dll? Cảm ơn vì bất kì sự giúp đỡ!Thư viện lớp ASP.NET UserControl

+0

@Mike C. đã thêm cập nhật vào câu trả lời của tôi, hãy kiểm tra. – eglasius

Trả lời

6

Cập nhật: tôi đã đúng về gợi ý của tôi về cách sử dụng điều khiển người dùng trước khi biên soạn như bạn làm một điều khiển người dùng.

Đối với một từng bước trên như thế nào, thấy Turning an .ascx User Control into a Redistributable Custom Control

Không cần cho bất kỳ.tập tin ascx trong dự án nơi bạn sẽ sử dụng nó, do đó, điều này phù hợp chính xác những gì bạn đang tìm kiếm.


Điều khiển người dùng không được sử dụng lại trên các trang web, thay vào đó hãy sử dụng custom server controls.

Bạn có thể soạn các điều khiển máy chủ bằng các điều khiển hiện có và thiết lập tất cả để bạn có thể tạo kiểu thông qua css.

Nếu bạn vẫn đang sử dụng phương pháp kiểm soát người dùng, hãy thử những gì Bob đã đề cập trong câu trả lời. Tôi đã không thực hiện nó với điều khiển người dùng, nhưng tôi mong đợi để có thể sử dụng đầu ra của phương pháp đó như bạn sẽ sử dụng một điều khiển máy chủ tùy chỉnh.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls"%> 
... 
<aspSample:WelcomeLabel Text="Hello" NameForAnonymousUser="Guest" 
    ID="WelcomeLabel1" runat="server" BackColor="Wheat" ForeColor="SaddleBrown" /> 

Ps. nếu điều đó không có tác dụng, liên kết mà anh ấy cung cấp sẽ cho bạn biết sao chép các tệp ascx, do đó, đó sẽ không phải là những gì bạn đang tìm kiếm i.e.try trên & nếu không tuân theo các điều khiển máy chủ tùy chỉnh.

+0

Tất nhiên bạn có thể sử dụng điều khiển người dùng trên nhiều trang – CRice

+0

@boon oops, có nghĩa là để nói trên các trang web - đã rõ ràng cho câu hỏi của OP;) – eglasius

0

Thay vào đó, bạn có thể muốn xem xét Server Controls. AFAIK bạn không thể biên dịch User Controls thành một DLL duy nhất.

9

Bạn có thể biên dịch cả hai số UserControl s và Page vào thư viện lớp vì cuối cùng, đây là những gì xảy ra sau khi trang web của bạn được biên dịch just in time. Quá trình này là một chút liên quan bởi vì thực sự UserControl s và Page không có nghĩa là được sử dụng trên các ứng dụng.

Từ MSDN:

Các UserControl cho bạn khả năng để tạo ra các điều khiển có thể được sử dụng trong nhiều địa điểm trong một ứng dụng hoặc tổ chức

http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx

Phương pháp ưa thích cho các điều khiển sẽ được sử dụng trên các ứng dụng sẽ tạo ra custom web server controls.

Nếu bạn thực sự muốn gắn bó với UserControl s tuy nhiên, quá trình cơ bản để có được chức năng này như sau:

  1. Tạo mới web application project.
  2. Phát triển reuseable UserControl s.
  3. Xuất bản trang web dưới dạng trang web không thể cập nhật *. (bỏ chọn Cho phép trang web này có thể cập nhật)
  4. Sao chép thư viện được biên soạn từ thư mục bin và ascx tệp khi cần từ trang web đã xuất bản vào trang web mới.

    • Tùy chọn không thể cập nhật là điều mang lại đánh dấu vào hội đồng. Đây là một bước quan trọng.

Vâng, như số điểm bốn tiểu bang, bạn không cần phải sao chép ascx tập tin. Đánh dấu sẽ được chứa trong thư viện lớp học và ascx thực sự sẽ trống. Không có cách nào để tránh điều này (trừ khi bạn sử dụng custom web server controls) vì UserControl s được thêm vào Page s thông qua tên tệp của chúng.

Tất cả điều này được ghi chép lại một cách chi tiết hơn qua tại MSDN,

http://msdn.microsoft.com/en-us/library/aa479564.aspx

+0

Tôi đã làm theo các bước, nhưng có vấn đề tích hợp lắp ráp vào trang web của tôi. Tôi đặt tùy chọn "unupdateable", và tôi đã tham khảo các tập tin .dll trong dự án mới của tôi. Tôi không thể tìm ra cách thực sự khai báo nó trên trang của mình. –

+0

Có phải là đay cho tôi, hoặc không phương pháp này VẪN yêu cầu bạn triển khai các tập tin đánh dấu .ascx? "1.Sao chép các tệp .aspx/.ascx thích hợp từ [...]" – Radu094

+0

được xây dựng. Bạn vẫn cần tệp vật lý ở đó, chúng sẽ trống. – Bob

0

Nếu chúng ta đang nói về biểu mẫu web, Câu trả lời là không. Đánh dấu (nội dung tập tin .ascx) không được biên dịch vào dll. Công cụ ASP.NET dự kiến ​​sẽ tìm thấy tệp này trong hệ thống tệp, cùng với ứng dụng web. Vì vậy, nó không thể tạo ra một DLL mà bạn chỉ có thể phân phối lại hoặc chia sẻ.

Nếu bạn muốn tạo điều khiển có thể được chia sẻ trên các ứng dụng web, bạn có thể tạo điều khiển tùy chỉnh thay thế, nhưng sau đó bạn phải mã HTML trong mã .net (ưu tiên sử dụng các lớp thích hợp cho tác vụ thay vì chỉ cần tạo html trong văn bản), có thể trở nên khá xấu nếu kiểm soát lớn.

Cá nhân, tôi nghĩ rằng điều này khá khó chịu vì đó là cách này. Tuy nhiên, tôi nghĩ rằng nếu bạn đang sử dụng ASP.NET MVC, có một số khả năng (tùy thuộc vào công cụ xem của bạn), nhưng tôi không có nhiều kinh nghiệm với MVC.

+0

Câu trả lời không phải là không, hãy xem câu trả lời của tôi. – Bob

+0

@bob, câu trả lời của bạn không cung cấp thư viện lớp (như trong một dll) với các điều khiển người dùng được nhúng, nhưng một loạt các tệp dll và các tệp ascx tương ứng. Bạn vẫn cần phải đặt các tệp đó trong ứng dụng web đích để có thể sử dụng các điều khiển. Vì vậy, câu trả lời cho câu hỏi, vì nó đã được phrased, là không. Câu trả lời của bạn có thể là một lựa chọn tốt. – Pete

+0

Nội dung tập tin được biên dịch vào dll. Bạn cần tệp ascx làm trình giữ chỗ. Có nhiều DLL chỉ phụ thuộc vào cấu trúc của dự án của bạn. Không có lý do tại sao nó không thể được kết hợp thành một. – Bob

0

Có vẻ như điều khiển máy chủ tùy chỉnh là những gì bạn đang tìm kiếm.

Nếu điều khiển của bạn là sự kết hợp của các điều khiển máy chủ khác (ví dụ: hộp văn bản và nút điều khiển ngày), thì bạn có thể xem CompositeDataBoundControl và CompositeControl - đây là những cách thuận tiện để làm việc với loại điều này.

Hãy coi chừng, tuy nhiên, rất dễ nhầm lẫn với cách thức hoạt động của quá trình tái hydrat hóa chu trình/chế độ xem trang. Tôi đã mất khá nhiều thời gian cho việc này, do sự hiểu lầm tinh tế về cách nó hoạt động.

http://aspnetresources.com/blog/composite_databound_control.aspx

0

Bạn có thể phục vụ Điều khiển người dùng từ dll. Bạn sẽ chỉ cần tạo một VirtualPathProvider tùy chỉnh để tải các điều khiển. Đây là điều cần thiết những gì SharePoint làm.

Dưới đây là một bài báo từ Microsoft giải thích quá trình:

http://support.microsoft.com/kb/910441

Bạn cũng có thể thực hiện tìm kiếm cho 'VirtualPathProvider'.

Ví dụ này tải mã từ cơ sở dữ liệu, nhưng bạn có thể sửa đổi nó để tải mã từ assembly như một tài nguyên nhúng. Chúng tôi đang làm điều này tại công ty của tôi để chia sẻ trang Master trên nhiều trang web và appdomains.

Tuy nhiên, một báo trước. Điều này sẽ không hoạt động trong môi trường tin cậy trung bình. Vì vậy, nếu bạn đang có kế hoạch triển khai này vào một môi trường lưu trữ được chia sẻ, hãy chắc chắn để làm một bài kiểm tra trên máy chủ của bạn để xem nếu nó sẽ làm việc đầu tiên.

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