Mam kilka widoków, każdy korzysta z własnego ViewModel oraz z wspólnego layout'a. Potrzebuję przekazać osoby ViewModel do layoutu zawierający dane takie jak nazwa strony, meta dane, itp. Jak to zrobić, aby rozwiązanie było ładne?
Nazwę strony możesz znaleźć gdzieś w ViewContext
. Co dokładnie chcesz osiągnąć?
Dokładnie rzecz ujmując chce uzyskać taki coś:
Views/Student/Index.cshtml
@model StudentsViewModel
@Layout = "_Layout.cshtml"
// reszta kodu
Views/School/Room.cshtml
@model RoomViewModel
@Layout = "_Layout.cshtml"
// reszta kodu
_Layout
@model LayoutModel // osobny model dla layouta
<title>@Model.Title</title>
<meta keywords="@Model.Keywords"/>
Coś takiego, tylko że mam dużo więcej widoków i jeden layout, chce mieć możliwość przekazania danych do layouta takich jakby współdzielony model dla wszystkich widoków.
To najprościej chyba utworzyć bazowy viewmodel i ustawić go jako @model
w layoucie, a konkretne viewmodele niech z niego dziedziczą.
Z dziedziczeniem po wspólnym ViewModel wiążą się pewne problemy. To rozwiązanie wydaje się przejrzyste: http://blog.gauffin.org/2011/09/getting-information-into-the-layout-without-using-viewbag/, co prawda jest to taki oszukany ViewBag, ale idea przysporzy mniej problemów.
Czyli zamieniamy bazowy ViewModel na bazowy kontroler i bazowy widok? Mnie nie przekonuje, ale może w pewnych sytuacjach ma to sens.