Partager un objet à l'échelle de l'application dans ASP.NET MVC3
-
29-10-2019 - |
Question
J'ai une application Web ASP.NET MVC3 avec C # et Razor.
Grâce à un formulaire dans une vue, j'obtiens le Context.User.Identity.Name
soumis à une méthode d'action dans un Controller A .
Je voudrais avoir disponible cette variable à l'échelle de l'application (entre plusieurs contrôleurs). Maintenant, je peux simplement l'attribuer à une variable globale _UserName dans le contrôleur A , mais bien sûr, elle n'est pas disponible dans le contrôleur B .
Est-il possible de faire cela?
Merci
Francesco
La solution
Si vous y accédez dans n'importe quel contrôleur, vous devez utiliser HttpContext.User.Identity dans vos méthodes de contrôleur - il sera disponible ici.Pas besoin de stocker dans la session.
Autres conseils
Créez un contrôleur parent dont tous vos contrôleurs héritent et définissez-y la variable.Vous pouvez faire un certain nombre de choses avec lui à partir de là - l'envelopper dans un modèle de vue, mettre quelques détails utilisateur dans le ViewBag, etc.
public class UserController : Controller
{
// create your own User class with as many properties as you need
protected User user { get; set; }
public UserController()
{
user = // get user from db, wherever
}
}
Ensuite, héritez simplement de UserController
public class ControllerA : UserController
{
public ActionResult DoSomething()
{
user.Property = 123;
}
}
Vous devriez examiner la mise en cache et éventuellement utiliser la session des utilisateurs pour stocker ces informations.
Découvrez ceci question.