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

2
  • 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. Commented Jan 8, 2009 at 21:50
  • You're right Craig - I've added another answer which provides more detail to my problem. Thanks for bothering. Commented Jan 9, 2009 at 19:11

5 Answers 5

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;
    }
}
Sign up to request clarification or add additional context in comments.

Comments

3

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

HttpContext.Current.User.Identity.Name

1 Comment

System.Web.HttpContext.Current.User.Identity.Name works (MVC 4)
1

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

Comments

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

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.