4

As described in this post, I created an abstract base controller class in order to be able to pass data from a controller to master.page. In this case, I want to lookup a user in my db, querying for User.Identity.Name (only if he is logged in).

However, I noticed that in this abstract base class the User property is always null. What do I have to do to get this working?

Thanks a lot

Masterfu
  • 1,191
  • 3
  • 14
  • 26
  • What kind of user? A domain user? Forms authentication? How have you configured authentication in your site web.config? More detail would be very helpful in getting you a good answer. – Craig Stuntz Jan 08 '09 at 21:50
  • You're right Craig - I've added another answer which provides more detail to my problem. Thanks for bothering. – Masterfu Jan 09 '09 at 19:11

5 Answers5

7

As Paco suggested, the viewdata isn't initialized till after you are trying to use it.

Try overriding Controller.Initialize() instead:

public abstract class ApplicationController : Controller
{
    private IUserRepository _repUser;

    public ApplicationController()
    {
    }

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        _repUser = RepositoryFactory.getUserRepository();
        var loggedInUser = _repUser.FindById(User.Identity.Name);
        ViewData["LoggedInUser"] = loggedInUser;
    }
}
Melethril
  • 71
  • 1
  • 3
3

To use the user, you should get the current page from

HttpContext.Current.User.Identity.Name
p.campbell
  • 98,673
  • 67
  • 256
  • 322
Adam Right
  • 171
  • 1
  • 2
  • 7
1

By setting authentication to Windows in web.config, you can get the user with User.Identity.Name

Danny
  • 2,771
  • 5
  • 30
  • 42
0

I use Page class on my static Utlilites classes. Like that;

Page P = (Page)HttpContext.Current.Handler;

and i can get all properties via the P object for the current requested page..

Adam Right
  • 171
  • 1
  • 2
  • 7
0

Have you tried this: ControllerContext.HttpContext.Current.User.Identity.Name?