2012-10-18 25 views
6

Mục tiêu:Danh sách All Controls trong C# ASP.NET Dự án

tôi đang cố gắng để tạo ra một trang điều khoản đó gán quyền cho các vai trò dựa trên các điều khiển trong webforms suốt ứng dụng. Tôi đang cố gắng để viết mã mà sẽ tạo ra một chuỗi các điều khiển cho một trang nhất định. Tên trang sẽ được chuyển thành một chuỗi.

Bài đăng này dưới đây rất giống với những gì tôi đang tìm kiếm mặc dù nó được viết cho một ứng dụng biểu mẫu cửa sổ trong VB.NET. Tôi hy vọng sẽ tìm thấy một giải pháp trong C# và áp dụng cho các biểu mẫu web. http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/

Bài đăng tiếp theo này dường như là những gì tôi đang tìm kiếm nhưng đề xuất tìm trong tệp không hoạt động vì tôi muốn mã chung chung hơn và mở rộng khi tôi thêm trang hoặc điều khiển vào biểu mẫu thay vì mã hóa cứng: Get List of Controls on each WebForm in an Assembly

Idea chung:

ý tưởng của tôi là phải có một người sử dụng chọn một vai trò từ một danh sách thả xuống. Sau đó, người dùng sẽ chọn một trang trong ứng dụng từ danh sách thả xuống. Sau đó SelectedIndexChanged sẽ truy vấn lớp biểu mẫu web của trang đã chọn và tạo ra một danh sách lưới tên của các điều khiển trên trang đó và một danh sách thả xuống các quyền khác có thể được gán. Khi người dùng đã thực hiện chỉnh sửa các điều khiển và quyền, họ sẽ nhấp vào lưu và thông tin sẽ được lưu vào cơ sở dữ liệu.

Khi người dùng được xác thực biểu mẫu tải trang, trang sẽ truy vấn cơ sở dữ liệu về quyền trên mỗi điều khiển và dựa trên vai trò và quyền của người dùng sẽ có trạng thái chỉ đọc, chỉnh sửa hoặc không hiển thị được gán cho điều khiển đó. Mục tiêu cuối cùng của tôi là dành cho quản trị viên người dùng cuối để có thể quản lý quyền trong ứng dụng thay vì có nhiều vai trò và quyền hoặc phải thực hiện công việc tùy chỉnh một lần dựa trên nhu cầu của khách hàng. Xin lưu ý rằng đây sẽ là trang duy nhất mà tôi đang cố truy cập các điều khiển trên các trang khác.

Tôi đang cố gắng liệt kê tất cả các điều khiển trong một dự án ASP.NET hoặc không gian tên vì trong trường hợp của tôi chỉ có một không gian tên trong dự án hiện tại của tôi. Tôi đã tìm thấy rất nhiều ví dụ liệt kê các điều khiển trên biểu mẫu hiện tại nhưng không tìm thấy bất kỳ mã nào có thể thực hiện trên toàn trang web. Tôi cũng có thể liệt kê tất cả các lớp biểu mẫu web mà tôi có: How to get all classes within namespace?

Nhưng có vẻ như bạn có thể truy cập lớp đó để kiểm soát được xác định ở đó - nếu ai đó có thể giải quyết vấn đề này Tôi nghĩ điều đó sẽ đưa tôi đến bước tiếp theo.

Những gì tôi đã thử:

  1. Một là để nhanh chóng các mẫu web riêng của mình và sau đó lặp qua các điều khiển tất cả các lập trình. Điều này đã không thành công ít nhất là cách mà tôi đã làm. Webform1 wf = new Webform1(); Tôi cũng đã cố gắng thêm một hàm tạo và một phương thức để sau đó đi qua và kiểm soát các điều khiển .

  2. Tôi cũng đã thử tạo lớp webform thông qua Trình kích hoạt .CreateInstance tôi đã cố gắng làm theo tấm gương trang này: Instantiate an object with a runtime-determined type

    Ví dụ:

    Page o = (Page)System.Activator.CreateInstance(Type.GetType(pageName)); 
    foreach (Control c in o.Controls) 
        lblMessages.Text = lblMessages.Text + c.ClientID.ToString() + "<BR>"; 
    

    này cũng không thành công. Nó đã biên dịch nhưng tôi sẽ có được một số kiểm soát của số không và tất nhiên không có điều khiển.

  3. Phương pháp cuối cùng, mà tôi đang cố gắng để tránh là một phương pháp thủ công của thu thập các điều khiển trên các trang trong ứng dụng của tôi (mà nên tĩnh một lần trong sản xuất) và sau đó vẫn có trang cho phép và quản trị viên chỉ định quyền cho vai trò tại thời điểm đó.

Cuối cùng:

Bất kỳ sự giúp đỡ chỉ cho tôi đi đúng hướng của việc có thể để tự động tinh chỉnh quyền truy cập để điều khiển sẽ được nhiều đánh giá cao ngay cả khi đó bao gồm xem xét một cách khác nhau để cho phép xử lý .

+0

Các trang có thay đổi không? Nếu không, bạn sẽ có thể tạo danh sách "tĩnh", tức là danh sách được điều khiển trước của các điều khiển đã biết trên mỗi trang .. – Patrick

+0

Tại thời điểm này, tôi không thấy ứng dụng tự động tạo điều khiển khi đang di chuyển. Tuy nhiên, tôi đã cố gắng tránh phải tự bảo trì danh sách khi tôi thêm các trang và chức năng mới. – Merch

Trả lời

0

Đó là kiến ​​trúc cơ bản của CMS.

Sử dụng Activator.CreateInstance đang đi đúng hướng. Nhưng có rất nhiều thứ khác nữa, ví dụ như sự tồn tại của trạng thái điều khiển giữa các bài viết.

Vui lòng xem xét DotNetNuke trong đó các điều khiển được tải động.

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