2012-10-18 13 views
6

Cel:Lista Wszystkie kontrole w C# ASP.NET Projektu

Próbuję utworzyć stronę, która przypisuje uprawnienia uprawnienia do ról na podstawie kontroli w webforms całej aplikacji. Próbuję napisać kod, który tworzy ciąg kontrolek dla danej strony. Nazwa strony zostanie przekazana jako ciąg znaków.

Ten wpis jest bardzo podobny do tego, czego szukam, mimo że został napisany dla aplikacji formularza Windows w VB.NET. Mam nadzieję znaleźć rozwiązanie w języku C# i zastosowanie do formularzy internetowych. http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/

Ten kolejny wpis również wydawał się być tym, czego szukałem, ale sugestia znalezienia w plikach nie działa tak, jak chciałbym, aby kod był bardziej ogólny i rozszerzał się, gdy dodawałem strony lub formanty do formularzy zamiast zakodowane: Get List of Controls on each WebForm in an Assembly

idea ogólne:

Mój pomysł jest, aby użytkownik wybrać rolę z listy rozwijanej. Następnie użytkownik wybiera stronę z aplikacji z rozwijanej listy. SelectedIndexChanged będzie następnie wyszukiwać w klasie webform wybranej strony i tworzyć siatkę z nazwami kontrolek na tej stronie oraz inną rozwijaną listą uprawnień, które można przypisać. Po zakończeniu edycji elementów sterujących i uprawnień użytkownik kliknął przycisk Zapisz, a informacje zostały zapisane w bazie danych.

Gdy użytkownik uwierzytelniony w formularzu załadował stronę, strona przeszuka bazę danych w poszukiwaniu uprawnień do każdej z formantów i na podstawie roli użytkownika, a uprawnienia będą miały status tylko do odczytu, edycji lub niewidoczny przypisany do tej kontrolki. Moim ostatecznym celem jest, aby administratorzy końcowi mogli zarządzać uprawnieniami w aplikacji, zamiast mieć szeroki zestaw ról i uprawnień lub wykonywać niestandardową jednorazową pracę w oparciu o potrzeby klienta. Należy pamiętać, że jest to jedyna strona, na której próbuję uzyskać dostęp do kontroli na innych stronach.

Próbuję wyświetlić listę wszystkich elementów sterujących w projekcie ASP.NET lub w przestrzeni nazw, ponieważ w moim przypadku w bieżącym projekcie istnieje tylko jedna przestrzeń nazw. Znalazłem wiele przykładów z listą kontrolek w bieżącym formularzu, ale nie znalazłem żadnego kodu, który mógłby to zrobić w całej witrynie. Byłem także w stanie wymienić wszystkich klas Webform że mam: How to get all classes within namespace?

Ale nie wydaje się, że można następnie przejść i kwerendy tej grupie kontroli, które są tam zdefiniowane - jeśli ktoś może rozwiązać ten problem kawałek, myślę, że to doprowadziłoby mnie do następnego kroku.

Co próbowałem:

  1. Jeden był do wystąpienia samego formularza internetowego i następnie pętli kontroli wszystko programowo. To nie było udane, przynajmniej sposób, w jaki to robiłem. Webform1 wf = new Webform1(); Próbowałem także dodając konstruktora i metodę, aby następnie przejść i przechodzić przez kontrolki .

  2. Próbowałem także utworzyć instancję klasy formularza przez aktywator .CreateInstance że próbował na przykładzie na tej stronie: Instantiate an object with a runtime-determined type

    przykład:

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

    nie było również skuteczne. Zrobiłem kompilację, ale uzyskałem liczbę kontrolną zero i oczywiście brak kontroli.

  3. Ostatnią metodą, której staram się unikać to ręczny sposób zbieranie elementów sterujących na stronach w mojej aplikacji (co powinny być statyczne raz w produkcji), a potem jeszcze o stronie Uprawnienia i administrator przypisuje uprawnienia do roli w tym momencie.

Wreszcie:

Każda pomoc wskazując mnie we właściwym kierunku jest w stanie dynamicznie uprawnienia precyzyjnego dostrojenia do kontroli będą mile widziane, nawet jeśli zawiera patrząc na innej drodze do uprawnień do obsługi .

+0

Czy strony się zmieniają? W przeciwnym razie powinieneś być w stanie zbudować "statyczną" listę, tj. Wstępnie skompilowaną listę znanych formantów na każdej stronie. – Patrick

+0

W tym momencie nie widzę aplikacji dynamicznie generującej kontrolki w locie. Jednak starałem się uniknąć konieczności ręcznego utrzymywania listy podczas dodawania nowych stron i funkcji. – Merch

Odpowiedz

0

To jest podstawowa architektura CMS-ów.

Używanie Activator.CreateInstance jest na dobrej drodze. Ale jest w tym dużo więcej, na przykład utrzymywanie stanów kontrolnych między stanowiskami.

Proszę spojrzeć na DotNetNuke, w którym elementy sterujące są ładowane dynamicznie.