2013-06-07 11 views
6

Używam MVC4 i Razor i chcę określić typ modelu z poziomu widoku. To powinno być łatwe, ale nie jestem w stanie uzyskać poprawnej składni.Uzyskaj typ modelu w widoku MVC

chcę to zrobić, więc mogę warunkowo wyświetlać różne znaczniki na stronie _Layout.cshtml zależności od bieżącego widoku i modelu, że jest on używany w

To musi być (chyba) coś na wzór.:

@if (Model.GetType() == Web.Models.AccommodationModel) { // Obviously not correct 
     <h1>Accomodation markup here</h1> 
} 

Wszelkie sugestie bardzo doceniane!

Odpowiedz

12

Można użyć is kluczowe:

@if (Model is Web.Models.AccommodationModel) { 
    <h1>Accomodation markup here</h1> 
} 

lub też (brzydsze):

@if (Model.GetType() == typeof(Web.Models.AccommodationModel)) { 
    <h1>Accomodation markup here</h1> 
} 
+0

Dzięki chłopaki, i tylko po to, aby zachować twarz, jestem * pewien * Próbowałem drugiej metody, którą sugerujesz powyżej, i to nie zadziałało. Próbowałem go ponownie i działa! To musiał być literówka czy coś. W każdym razie dzięki bardzo. – WheretheresaWill

4

Choć masz już odpowiedź Proponuję przemyśleć całą koncepcję.

To, co tu robisz, to połączenie ogólnego układu z pewnymi określonymi widokami. Widoki te mogą w przyszłości ulec zmianie, wymagając zmiany układu, może być ich coraz więcej lub niektóre zostaną usunięte. Twoje podejście łamie zasadę odpowiedzialności pojedynczej: jest oczywiście więcej niż jeden powód do zmiany _layout.cshtml.

Co dodać do wstawienia @section SomeSection { <h1>markup</h1> } w widokach wymagających takiego dodatkowego kodu i renderowania go w układzie za pomocą @RenderSection("SomeSection"), może również z sprawdzeniem @if(IsSectionDefined("SomeSection")) w miejscu, które chcesz?

+0

Tak, fair point. Przyjrzę się również użyciu tej metody. To było bardziej dla szybkiej poprawki zawartości modalu przechowywanego w '_Layout', ale nadal jest to dobra rzecz - dzięki. – WheretheresaWill