2012-04-13 15 views
0

Das Szenario ist, dass ich die Navigationsleiste, das Menü, mit Mvc.Sitemap füllen möchte.Ist es möglich, ein View-Modell auf _layout.cshtml hinzuzufügen?

Wie soll ich das erreichen?

Es ist seltsam, ein View Model auf der Layoutseite hinzuzufügen. Und das kann dazu führen, dass eine Ansicht mehr als ein View-Modell hat.

kann jemand helfen? Vielen Dank.

Update: ---------- Ich habe Home/_Menu als Teilansicht, die MenuViewModel verwendet. Aber wie kann ich diese Ansicht in _layout einschließen?

Ich kann @Html.Partial("_Menu") in meinem _Layout.cshtml nicht einfach verwenden, weil ich den Controller und die Aktion angeben muss, wo das Ansichtsmodell erstellt wird. Was ist der richtige Weg, dies zu tun? Wenn ich @Html.RenderAction("_Menu", "Home") mache, bekomme ich einen Object reference not set to an instance of an object. Fehler auf dem Modell.

Antwort

1

Sie sollten kein Modell in Ihrem Layout haben, weil dann jede Ansicht, die Sie von dort standardmäßig aufrufen, dieses Modell haben wird. Stattdessen sollten Sie eine Menüansicht mit dem Modell erstellen und beim Aufruf ein neues MenuModel als Modell übergeben.

Bearbeiten: Sie können eine Klasse haben, die Daten aus wo Sie Ihre Menüwerte speichern. Dann rufen Sie Ihre teilweise wie folgt aus:

@Html.Partial("_Menu_", menuobject.Root) 

Und die Klasse:

partial class menuobject 
{ 
    public static menuobject Root 
    { 
     // MenuRoots are all roots that have ID -1 - which will be the root 
     return MenuRoots.Single(x => x.Something == "Topnavi"); // this will return the root above all your menus 
    } 
} 

als Ihrer Ansicht nach gehen Sie foreach() auf jeder Ebene der Menüs, sie zu füllen.

+0

Ich habe versucht, dies zu tun. Bitte sehen Sie sich die aktualisierte Frage an. Vielen Dank. – Blaise

+0

Aktualisiert die Frage. Ich hoffe, es hilft. –

Verwandte Themen