Porady dotyczące tworzenia dynamicznej kontroli „Wyszukiwanie zaawansowane” w ASP.NET

alt text http://img3.imageshack.us/img3/1488/advancedsearch.png

Buduję interfejs „Wyszukiwanie zaawansowane” w aplikacji ASP.NET. Nie potrzebuję SO, aby napisać to dla mnie, ale utknąłem na konkretnym problemie dotyczącym dynamicznych elementów sterujących i ViewState. Chciałbym uzyskać wskazówki, jak podejść do tego. Oto moja sytuacja:

Składniki:

Serwisowalny zestaw obiektów API reprezentujących podmioty, pola i wyszukiwania, który obsługuje konstruowanie wyszukiwania, generowanie kodu SQL i zwracanie wyników. Więc to wszystko załatwione.ASP.NET 3.5

Wymagana funkcjonalność interfejsu:

(1) Przy początkowym ładowaniu strony interfejs pobiera wstępnie skonfigurowany obiekt wyszukiwania z zestawem obiektów SearchCriterion. Wiąże je w zestaw kontrolek (patrz obrazek powyżej).

Niektóre elementy wyszukiwania są prostsze, np .:

Pole (DropDownList) | Operator (DropDownList) | Wartość (TextBox)

Elementy sterujące kryterium wyszukiwania dla niektórych typów pól mają ważne informacje przechowywane w widoku, takie jak:

Pole (DropDownList) | Operator (DropDownList) | Wartość (DropDownList), gdzie lista rozwijana „Wartość” jest wypełniana przez zapytanie do bazy danych.

Niektóre pola są wyszukiwane przez inne Jednostki, co powoduje łańcuch selektorów pól, takich jak:

Pole (DropDownList) Pole (DropDownList) | Operator (DropDownList) | Wartość

(2) Użytkownik modyfikuje wyszukiwanie według:

Dodawanie i usuwanie kryteriów wyszukiwania poprzez kliknięcie odpowiednich przyciskówKonfigurowanie istniejących kryteriów przez zmianę pola, operatora lub wartości. Zmiany pola lub operatora będą wymagały od kontrolera zmiany konfiguracji poprzez zmianę dostępnych operatorów, zmianę kontroli wejścia „Wartość” na inny typ lub dodanie / usunięcie listy DropDownLists z sekcji „Pola”, jeśli pola typu wyszukiwania są zaznaczone / niezaznaczone .

(3) Na koniec użytkownik kliknie „Szukaj”, aby zobaczyć ich wyniki.

Problem:

Jak już zapewne wiesz, jeśli odpowiadasz na to pytanie, elementy sterujące dodane dynamicznie do strony znikają po odsłonie. Stworzyłem UserControl, który manipuluje kolekcją kontrolną i starannie wykonuje krok (1) powyżej, jak widać na załączonym obrazie. (Oczywiście nie martwię się o styl.)

Jednak na Postback wszystkie kontrolki zniknęły, a mój obiekt API wyszukiwania zniknął. Gdybym mógł uzyskać dynamicznie generowaną kolekcję kontrolną, aby po prostu grać ładnie i trzymać w ViewState, mógłbym zbadać kontrolki na postbacku, odbudować obiekt Search, a następnie porządnie obsługiwać zdarzenia sterujące.

Możliwe rozwiązania

Mogę przekształcić obiekt wyszukiwania w serializację i zapisać go w widoku. Następnie na stronie ładowania mogłem go złapać i zrekonstruować kolekcję kontrolną w czasie ładowania strony. Jednak nie jestem pewien, czy będzie to dobrze pasować do zdarzeń podnoszących kontrolki i co stanie się z punktem wyświetlania list rozwijanych zawierających dane z bazy danych - czy mogę je odzyskać? Bardzo niepożądane jest dla mnie, aby ponownie przesyłać kwerendę do bazy danych przy każdym postbacku.

Mogę opracować niestandardową kontrolę serwera (zobacz ten link) dla tego rodzaju rzeczy ... ale jest to dla mnie nowy temat i wymagałby trochę nauki, a poza tym nie jestem do końca pewien, czy niestandardowa kontrola serwera będzie działać ładniej z nieregulowanymi kolekcjami kontrolnymi. Czy ktoś o tym wie?

Myślałem, że być może uda mi się to osiągnąć za pomocą kontrolek baz danych - na przykład mógłbym powiązać kolekcję kryteriów ze wzmacniaczem, który ma stałą kolekcję kontroli (może ukryć nieużywane kontrolki „wartości”, użyć wewnętrznego przekaźnika dla Listy rozwijane „Pole”). Wtedy wszystkie informacje pozostaną w ViewState ... prawda?

Wszelkie nowe pomysły byłyby bardzo mile widziane.

dzięki za pomoc. b.Fandango

questionAnswers(4)

yourAnswerToTheQuestion