2010-05-21 3 views
0

J'ai actuellement une classe de contrôleur abstrait dont tous mes contrôleurs héritent. Je veux être en mesure d'utiliser l'objet utilisateur courant (IPrinciple) dans ma page maître. je lis que je pouvais utiliser le contructor de ma classe abstraite du contrôleur de base, c'est que je pouvais faire quelque chose commeAccéder à IPrinciple courant dans une vue maître dans Asp.Net MVC

public BaseController() 
    { 
     ViewData["UserName"] = this.User.Identity.Name; 
    } 

Je pourrais alors accéder ViewData [ « UserName »] etc ma page principale. Mon problème est que this.User est null à ce stade. Est-ce que quelqu'un connaît une approche différente?

Merci d'avance.

Répondre

2

Vous pouvez écrire un ActionFilter et en cas OnActionExecuted mettre l'utilisateur dans ViewData:

public class UserActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     filterContext.Controller.ViewData["UserName"] = filterContext.HttpContext.User.Identity.Name; 
    } 
} 

Et puis décorer votre contrôleur de base avec cet attribut:

[UserActionFilter] 
public abstract class BaseController: Controller 
{ } 
+0

qui fonctionne un régal! Merci beaucoup pour votre aide! – bplus

Questions connexes