Greifen Sie in allen Ansichten auf die Viewbag-Eigenschaft zu

7

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.

    
Andres Duran Kenny-Espinosa 05.12.2014, 03:59
quelle

4 Antworten

13

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: -

%Vor%     
Kartikeya Khosla 05.12.2014, 04:17
quelle
15

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.

    
Darkseal 27.03.2015 11:42
quelle
6

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 :

%Vor%

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. Ссылка

    
Ashley Lee 05.12.2014 04:20
quelle
0

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.

    
tecla 16.06.2017 07:57
quelle