2012-08-27 14 views
5

Tak więc tworzę stronę rejestracji w ASP.NET MVC i tam jest lista pól, które zmieniają się w zależności od wielu warunków (wziętych z bazy danych).Polimorficzne widoki MVC

Co byłoby uważane za najlepsze podejście do wyświetlania tych pól w widoku bez zmian kodu za każdym razem, gdy baza danych jest aktualizowana.

Obecny system, o którym myślę, to stworzenie słownika z "Name, DataType", a następnie po prostu przejrzenie listy i wprowadzenie nowego typu wejścia dla każdej nazwy (za pomocą przełącznika dla typu danych, aby uzyskać poprawny edytor). Wygląda jednak na staroświecki i nie w pełni wykorzystuje zalety systemu .NET MVC (takie jak walidacja, wartości domyślne, niestandardowe edytory dla określonych treści).

Czy istnieje podejście, którego być może nie jestem świadomy w .NET, aby rozwiązać ten problem?

+0

Najlepszym podejściem (z perspektywy MVC) byłoby stworzenie różnych widoków dla każdego scenariusza, ponieważ "widok nigdy nie powinien zawierać żadnej logiki". Wątpię jednak, by był to rodzaj odpowiedzi, o którą prosiłeś, więc nie zamierzam zamieszczać tego jako odpowiedzi. Czy możesz podać dodatkowe informacje na temat tego, co próbujesz osiągnąć i dlaczego? Pomoże nam to znaleźć bardziej szczegółowe rozwiązanie Twojego problemu (takie, z którym nie będziesz miał nic przeciwko). – Pluc

+0

@Pluc zasadniczo jest systemem rejestracji zdarzeń, a każdy "Klient" określa własne pola, które są wymagane, aby użytkownik mógł wejść, zanim będzie mógł się zarejestrować. Ponieważ nie kontrolujemy wpisów klientów, trudno jest nam wyświetlić widok dla każdego scenariusza :( –

+0

Więc pola mogą mieć wiele typów i dowolną ilość? – Pluc

Odpowiedz

6

Miałem bardzo podobny problem. Publikacja to here.

Nie, w ASP.NET MVC nie ma widoków polimorfizmu. Przynajmniej nie mógłbym sprawić, by działało, wykonując tony i ton eksperymentów i zadając to pytanie kilka razy na różne sposoby w Stack Overflow.

Typ @model zdefiniowany w widoku zdefiniuje jego typ wewnątrz widoku, a nie faktyczny typ modelu (w przypadku, gdy był to interfejs lub klasa abstrakcyjna lub klasa podstawowa, podczas gdy przechodzisz w klasie dziecka ze wszystkimi pięknymi dekoracje, które nie będą działać, ponieważ typ jest zdefiniowany przez typ modelu).

Przepraszamy, brak pozytywnej odpowiedzi na twoje pytanie. Skończyło się na tym, że napisałem kilka szablonów edytora, które różniły się tylko w zależności od typu modelu. Ogromne naruszenie DRY, ale w ten sposób działało ASP MVC, niestety.

Mam nadzieję, że to pomoże Ci zaoszczędzić trochę czasu.

+0

Dziękuję za tę odpowiedź.Mogę teraz przestać uderzać mojej głowy przeciwko niedoskonałości OO ASP.NET MVC.Wszystkie moje eksperymenty do tej pory potwierdzić exactl y co mówisz: tutaj nie ma widoków polimorfizmów w ASP.NET MVC – Geeb

+0

cieszyć. to dużo czasu, więc starałem się go trochę uratować innym –

Powiązane problemy