2013-06-24 18 views
9

W ASP.NET MVC i przy użyciu maszynki Razor, mam widok (nadrzędny), który wywołuje inny widok (dziecko) jako częściowy. Oba są mocno typowane, ale mają inny typ modelu.Jak uniemożliwić przeglądanie przekazywanie jego model do częściowego widoku, ale zamiast tego przekazać null?

Zwykle w takich sytuacjach przekazujemy model bezpośrednio z nadrzędnego widoku do widoku podrzędnego.

@Html.Partial("Child", Model) 

Możemy również wybrać, aby nie określić jednoznacznie modelu mają być przekazane, aw takich przypadkach rodzic Zobacz będzie próbował przekazać swój własny model do dziecka View. Działa to, jeśli typy są zgodne i jest pożądane w większości przypadków.

@Html.Partial("Child") 

W moim przypadku jednak naprawdę chcę się nadrzędną Zobacz nie spróbować przekazać coś dziecku View. Jak to zrobić?

myślałem próbuje przekazać null wyraźnie:

@Html.Partial("Child", null) 

Ale to wciąż przechodzi rodzica model dla dziecka Widok, w wyniku błędu: The model item passed into the dictionary is of type 'A', but this dictionary requires a model item of type 'B'.

(Jako marginesie, Widok podrzędny to widok tworzenia dla swojego modelu, dlatego nie mam instancji, która mogłaby go przekazać.)

Odpowiedz

11

Spróbuj:

@Html.Partial("Child", null, new ViewDataDictionary<ChildType>(childInstance/*this can be null*/)) 
5

Rozumiem, że powodem, dla którego nie chcesz przekazać modelu, jest to, że twoje dane wejściowe są opróżnione ? Jeśli jest to przypadek, można raczej zdać nowy model to częściowy:

@Html.Partial("Child", new Model()) 

ponieważ model jest nowy, to nie będzie miał żadnych wartości zaludnionych.

+1

rodzaju . Mówiąc dokładniej, powodem jest to, że kiedy wywoływany jest widok, nie istnieje przypadek tego Modelu * koncepcyjnie *. Czułem się niekomfortowo, tworząc i przekazując instancję Modelu, który jeszcze nie istnieje i może nie zostać w ogóle zatwierdzony tylko po to, aby zadowolić mechanizm wyświetlania. –

1

Możliwe, że twoja forma tworzenia nie będzie mocno napisana ... przygotuj dane wejściowe, aby raz opublikować, będziesz mieć model powiązany w działaniu kontrolera.

Teraz ... dla mnie to nie jest warte pracy tylko z powodu konceptualnej subtelności "Modelu jeszcze nieistniejącego" (AKA jeszcze nie w bazie danych).

W moim przypadku tworzenia fikcyjnych modeli tylko do ustawienia domyślnych wartości w określonych obszarach (na przykład: ustawienie daty dzisiaj, wartości domyślne w dropdownlists, itp)

Powiązane problemy