Wie kann ich auf einige ViewBag-Eigenschaften in allen meinen Ansichten zugreifen? Ich möchte einige Informationen wie den aktuellen Benutzernamen usw. überall verfügbar haben, ohne die Eigenschaften in jeder ActionResult-Methode für mein Projekt spezifisch definieren zu müssen.
Der beste und einfachste Weg, um Ihre Anforderung zu erfüllen, besteht darin, einen benutzerdefinierten Basis-Controller zu erstellen und Ihren Controller von diesem Basis-Controller zu übernehmen.
%Vor% Erben Sie nun anstelle von Controller
class MyBaseController
in Ihrem Controller wie folgt: -
Sie können erreichen, was Sie wollen auf eine Reihe von Wegen, jeder mit seinen Vor- und Nachteilen.
1. Mit einer Basisklasse
%Vor%PROS : Ganz einfach zu implementieren, wenige Zeilen Code, stark wiederverwendbar, kann nach Belieben deaktiviert werden (siehe Kommentare unten).
CONS : Wenn Sie gezwungen sind, alle Ihre Controller von einer Basisklasse abzuleiten, könnte dies Auswirkungen haben, besonders wenn Sie bereits viele Controller installiert haben und / oder diese von einer anderen Basis ableiten müssen Klassen.
2. Mit einem Modul
%Vor%PROS : Keine, die mir bekannt sind.
CONS : Keine, die mir bekannt ist (außer ein bisschen kontraintuitiv zu sein).
3. Mit einem RegisterController Hook
%Vor%PROS : Schnell, sicher, wiederverwendbar: ideal für jedes IoC-Designmuster.
CONS : Nicht immer für kleine Projekte und / oder einfache Websites geeignet: Wenn Sie nicht IoC verwenden, verwenden Sie den RegisterController oft nicht.
4. Mit einem ActionFilter-Attribut
%Vor%und dann in Ihrer Datei Global.asax.cs:
%Vor%PROS : Leicht die weniger aufdringliche Methode unter den genannten.
CONS : Keine, die mir bekannt ist.
Ich schrieb auch an Artikel , der alle oben genannten Methoden erklärt.
Eine Möglichkeit: Erstellen Sie ein benutzerdefiniertes Attribut und wenden Sie es global in der FilterConfig an. Dann müssen Sie nichts in Ihren Controllern tun.
%Vor% In App_Start/FilterConfig.cs
:
Eine andere Möglichkeit, wenn Sie nur die Benutzerinformationen benötigen. Sie können Folgendes zum Anfang Ihrer Ansicht hinzufügen:
%Vor%Greifen Sie dann mit folgender Syntax auf Ihren Benutzernamen zu:
%Vor%Sie können auch die IPrincipal-Implementierung überschreiben und eigene Eigenschaften und Methoden angeben, um weitere Informationen zum Rendern hinzuzufügen.
UPDATE : Blick auf MVC 6 in Asp.Net vNext wird tatsächlich in das Framework eingebunden. Ссылка
Meine aktuelle Lösung:
Erstellen Sie einen Basis-Controller mit allen benötigten Eigenschaften (sehr nützlich und ratsam).
%Vor%Übernimmt alle Ihre Controller vom Basiscontroller.
%Vor%Fügen Sie in Ihren Ansichten diese Zeile direkt nach dem "@model" -Satz hinzu:
%Vor%Jetzt können Sie die Eigenschaft in Ihrer Ansicht verwenden, ohne den ViewBag aufzufüllen, ohne die ViewBag-Werte überprüfen und umwandeln zu müssen usw.
In der Ansicht können Sie einen einfachen Inline-Ausdruck verwenden:
%Vor%Oder mach eine magische Logik ...
%Vor%Einfach, schnell und bequem.
Tags und Links asp.net-mvc razor asp.net asp.net-mvc-4