Kann ein controller Einfluss auf die _layout.cshtml-Datei?
Ich bin stecken! Ich bin unter dem Eindruck, dass die _layout.cshtml-Datei wird für MasterPage-wie die Inhalte. Alles, was es gibt auf jeder Seite gerendert. Natürlich, ich will schreiben Sie den code für das Rendern meiner sidebar Menü in der Datei.
Möchte ich dynamisch eine Liste von Kategorien, aus meiner DB, aber ich habe ein problem mit dem übertragen des eigentlichen Modells der Kategorien-Layout.cshtml, da es scheint, kein controller tatsächlich berührt es.
Irgendwelche Vorschläge?
Ansonsten bitte mir sagen, wie ich zur Lösung dieses Problems. Ich habe schon nervenaufreibenden mein Gehirn für die letzten drei Tage und immer noch keine elegante Lösung.
Muss ich:
- Dynamisch Holen Sie sich eine Liste der Kategorien aus der DB.
- Anzeige dieser Liste der Kategorien auf jeder einzelnen Ansicht. (Daher die Verwendung von _layout.cshtml)
- Aus jeweils behandeln die verschiedenen Kategorien klicken.
Ich bin mit meinem Latein am Ende. 😛 Wie würde Sie dieses Problem lösen?
- Sie haben gefragt, eine Reihe von Fragen im Zusammenhang mit diesem in den letzten paar Tagen, und eine Reihe von Lösungen wurde, einschließlich eines oder eine Kombination von 1) RenderPartial 2) RenderAction 3) ViewData 4) Global action filter, etc. Haben Sie versucht, alle von Ihnen und wie werden Sie nicht für Ihre Anforderungen?
- Es läuft darauf hinaus, das layout.cshtml-Datei nicht in der Lage zu verwenden, die eine übergebene Modell, weil kein controller handelt. Vorschläge?
- RenderAction?
- Was meinst du mit "kein controller acts on it"? Der controller erzeugt/holt sich die view-model und übergibt Sie an den view. Thew view (sei es der Inhalt oder die master), dann tut, was es will zeigen, was die view-model-Objekt enthält. Wenn der controller geht in das Modell, dann die Ansicht hat Zugang zu Ihr.
- Jeder scheint zu sein, ignoriert mein problem und nur spuckt lehrbuch-material. Ich bin mit der _Layout.cshtml-Datei, NICHT EINE normale ANSICHT. Kein controller wirkt auf diese. Hab ich schon gefunden meine Lösung, obwohl, Lorenzo half mir schon. Ich habe eine extension-Methode für die HtmlHelper-und JETZT kann ich rufen Sie die Kategorien.
- Ich glaube nicht, dass jeder das ignoriert ist Ihr problem. Ich denke einfach, Sie sind die falschen Fragen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
_layout.cshtml
index.cshtml
sehen : http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
Jede viewmodel, dass Sie passieren, um Ihre anzeigen automatisch innerhalb Ihrer master-Seite. Wenn Sie nicht verwenden RenderAction/Aktion was ist der beste Ansatz, dann müssen Sie erstellen die notwendigen master-Seite Daten in jeder Aktion, und fügen Sie es viewdata - entweder, indem er eine gemeinsame Basis-Klasse für Ihre stark typisierte viewmodel enthält alle master-Seite Daten oder das viewdata-dictionary.
Ich würde empfehlen, dass Sie die html.Aktion Vorgehensweise aber. Auf diese Weise, Sie haben einen völlig separaten controller-Aktion für den Umgang mit einer Liste der Kategorien. Diese Aktion abrufen können, die notwendig Kategorie von Daten und Rückgabe der categorylist usercontrol als partialview und Sie werden keine sorgen zu machen, verschmutzen alle anderen Aktionen mit diesen Daten.
Wie ich es sehe,
ViewData
(und seine verwandten wie ViewBag, Modell, etc.) ist gedacht für die spezifische aktuelle Sicht. Ihre _Layout.cshtml ist nicht spezifisch für die aktuelle Ansicht; und es wäre umständlich, wenn JEDER controller würde zu Durchlaufen haben, die Kategorien von Daten zusätzlich zu was auch immer sonst noch Daten die es braucht, um pass für die Ansicht.Statt, was ich Tue, ist eine statische Methode in einem meiner Helfer-Klassen, ruft die Kategorien aus der DB. Ich habe auch noch ein Cache gibt, so dass ich nicht getroffen habe, um die DB auf jede einzelne Anfrage. Die _Layout.cshtml dann ruft einfach diese statische Methode. Einfach und elegant.
Wenn Sie es wünschen, können Sie diese aus, um eine Teilansicht, machen es eine helper-Methode, was auch immer.
Einer Notiz der Vorsicht aber - meine benutzerdefinierte Fehlermeldung anzeigen verwendet auch die gleiche _Layout.cshtml, und wenn die DB ausfällt, erhalten Sie eine Ausnahme, versuchen, anzeigen, die Ausnahme. ASP.NET MVC ist schlau genug, dies zu erkennen und Abbruch der Verarbeitung, aber Sie sind Links mit einem langweiligen Standard-Fehler-Seite. Was ich Tat, war auf Platz
try...catch
Aussagen rund um diese gefährliche Anrufe, die ruhig ignorieren der Ausnahme, wenn die aktuelle Seite die Fehler anzeigen.Habe ich etwas erreicht ähnliches durch mit meinem ViewModels eine Schnittstelle implementieren, die Mitglieder enthalten, die im Menü Daten. In meiner action-Methode, die ich festgelegt, dass die Daten. Dann in meiner Ansicht, die ich überprüfen, um zu sehen, ob meine Ansicht-Modell implementiert, das inteface, ziehen Sie das Menü Daten aus und machen das Menü (in einer Teilansicht eigentlich)